aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/tads/tads2/ler.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/glk/tads/tads2/ler.h')
-rw-r--r--engines/glk/tads/tads2/ler.h617
1 files changed, 0 insertions, 617 deletions
diff --git a/engines/glk/tads/tads2/ler.h b/engines/glk/tads/tads2/ler.h
deleted file mode 100644
index 57e3e63c2c..0000000000
--- a/engines/glk/tads/tads2/ler.h
+++ /dev/null
@@ -1,617 +0,0 @@
-/* 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.
- *
- */
-
-#ifndef GLK_TADS_TADS2_LER
-#define GLK_TADS_TADS2_LER
-
-#include "common/scummsys.h"
-#include "common/stream.h"
-#include "common/algorithm.h"
-
-namespace Glk {
-namespace TADS {
-namespace TADS2 {
-
-// maximum length of a facility identifier
-#define ERRFACMAX 6
-
-enum ErrorCode {
- /* memory/cache manager errors */
- ERR_NOMEM = 1, /* out of memory */
- ERR_FSEEK = 2, /* error seeking in file */
- ERR_FREAD = 3, /* error reading from file */
- ERR_NOPAGE = 4, /* no more page slots */
- ERR_REALCK = 5, /* attempting to reallocate a locked object */
- ERR_SWAPBIG = 6, /* swapfile limit reached - out of virtual memory */
- ERR_FWRITE = 7, /* error writing file */
- ERR_SWAPPG = 8, /* exceeded swap page table limit */
- ERR_CLIUSE = 9, /* requested client object number already in use */
- ERR_CLIFULL = 10, /* client mapping table is full */
- ERR_NOMEM1 = 11, /* swapping/garbage collection failed to find enuf */
- ERR_NOMEM2 = 12, /* no memory to resize (expand) an object */
- ERR_OPSWAP = 13, /* unable to open swap file */
- ERR_NOHDR = 14, /* can't get a new object header */
- ERR_NOLOAD = 15, /* mcm cannot find object to load (internal error) */
- ERR_LCKFRE = 16, /* attempting to free a locked object (internal) */
- ERR_INVOBJ = 17, /* invalid object */
- ERR_BIGOBJ = 18, /* object too big - exceeds memory allocation limit */
-
- /* lexical analysis errors */
- ERR_INVTOK = 100, /* invalid token */
- ERR_STREOF = 101, /* end of file while scanning string */
- ERR_TRUNC = 102, /* symbol too long - truncated */
- ERR_NOLCLSY = 103, /* no space in local symbol table */
- ERR_PRPDIR = 104, /* invalid preprocessor (#) directive */
- ERR_INCNOFN = 105, /* no filename in #include directive */
- ERR_INCSYN = 106, /* invalid #include syntax */
- ERR_INCSEAR = 107, /* can't find included file */
- ERR_INCMTCH = 108, /* no matching delimiter in #include filename */
- ERR_MANYSYM = 109, /* out of space for symbol table */
- ERR_LONGLIN = 110, /* line too long */
- ERR_INCRPT = 111, /* header file already included - ignored */
- ERR_PRAGMA = 112, /* unknown pragma (ignored) */
- ERR_BADPELSE = 113, /* unexpected #else */
- ERR_BADENDIF = 114, /* unexpected #endif */
- ERR_BADELIF = 115, /* unexpected #elif */
- ERR_MANYPIF = 116, /* #if nesting too deep */
- ERR_DEFREDEF = 117, /* symbol already defined */
- ERR_PUNDEF = 118, /* #undef symbol not defined */
- ERR_NOENDIF = 119, /* missing #endif */
- ERR_MACNEST = 120, /* macros nested too deeply */
- ERR_BADISDEF = 121, /* invalid argument for defined() operator */
- ERR_PIF_NA = 122, /* #if is not implemented */
- ERR_PELIF_NA = 123, /* #elif is not implemented */
- ERR_P_ERROR = 124, /* error directive: %s */
- ERR_LONG_FILE_MACRO = 125, /* __FILE__ expansion too long */
- ERR_LONG_LINE_MACRO = 126, /* __LINE__ expansion too long */
-
- /* undo errors */
- ERR_UNDOVF = 200, /* operation is too big for undo log */
- ERR_NOUNDO = 201, /* no more undo information */
- ERR_ICUNDO = 202, /* incomplete undo (no previous savepoint) */
-
- /* parser errors */
- ERR_REQTOK = 300, /* expected token (arg 1) - found something else */
- ERR_REQSYM = 301, /* expected symbol */
- ERR_REQPRP = 302, /* expected a property name */
- ERR_REQOPN = 303, /* expected operand */
- ERR_REQARG = 304, /* expected comma or closing paren (arg list) */
- ERR_NONODE = 305, /* no space for new parse node */
- ERR_REQOBJ = 306, /* epxected object name */
- ERR_REQEXT = 307, /* redefining symbol as external function */
- ERR_REQFCN = 308, /* redefining symbol as function */
- ERR_NOCLASS = 309, /* can't use CLASS with function/external function */
- ERR_REQUNO = 310, /* required unary operator */
- ERR_REQBIN = 311, /* required binary operator */
- ERR_INVBIN = 312, /* invalid binary operator */
- ERR_INVASI = 313, /* invalid assignment */
- ERR_REQVAR = 314, /* required variable name */
- ERR_LCLSYN = 315, /* required comma or semicolon in local list */
- ERR_REQRBR = 316, /* required right brace (eof before end of group) */
- ERR_BADBRK = 317, /* 'break' without 'while' */
- ERR_BADCNT = 318, /* 'continue' without 'while' */
- ERR_BADELS = 319, /* 'else' without 'if' */
- ERR_WEQASI = 320, /* warning: possible use of '=' where ':=' intended */
- ERR_EOF = 321, /* unexpected end of file */
- ERR_SYNTAX = 322, /* general syntax error */
- ERR_INVOP = 323, /* invalid operand type */
- ERR_NOMEMLC = 324, /* no memory for new local symbol table */
- ERR_NOMEMAR = 325, /* no memory for argument symbol table */
- ERR_FREDEF = 326, /* redefining a function which is already defined */
- ERR_NOSW = 327, /* 'case' or 'default' and not in switch block */
- ERR_SWRQCN = 328, /* constant required in switch case value */
- ERR_REQLBL = 329, /* label required for 'goto' */
- ERR_NOGOTO = 330, /* 'goto' label never defined */
- ERR_MANYSC = 331, /* too many superclasses for object */
- ERR_OREDEF = 332, /* redefining symbol as object */
- ERR_PREDEF = 333, /* property being redefined in object */
- ERR_BADPVL = 334, /* invalid property value */
- ERR_BADVOC = 335, /* bad vocabulary property value */
- ERR_BADTPL = 336, /* bad template property value (need sstring) */
- ERR_LONGTPL = 337, /* template base property name too long */
- ERR_MANYTPL = 338, /* too many templates (internal compiler limit) */
- ERR_BADCMPD = 339, /* bad value for compound word (sstring required) */
- ERR_BADFMT = 340, /* bad value for format string (sstring needed) */
- ERR_BADSYN = 341, /* invalid value for synonym (sstring required) */
- ERR_UNDFSYM = 342, /* undefined symbol */
- ERR_BADSPEC = 343, /* bad special word */
- ERR_NOSELF = 344, /* "self" not valid in this context */
- ERR_STREND = 345, /* warning: possible unterminated string */
- ERR_MODRPLX = 346, /* modify/replace not allowed with external func */
- ERR_MODFCN = 347, /* modify not allowed with function */
- ERR_MODFWD = 348, /* modify/replace not allowed with forward func */
- ERR_MODOBJ = 349, /* modify can only be used with a defined object */
- ERR_RPLSPEC = 350, /* warning - replacing specialWords */
- ERR_SPECNIL = 351, /* nil only allowed with modify specialWords */
- ERR_BADLCL = 353, /* 'local' statement must precede executable code */
- ERR_IMPPROP = 354, /* implied verifier '%s' is not a property */
- ERR_BADTPLF = 355, /* invalid command template flag */
- ERR_NOTPLFLG = 356, /* flags are not allowed with old file format */
- ERR_AMBIGBIN = 357, /* warning: operator '%s' could be binary */
- ERR_PIA = 358, /* warning: possibly incorrect assignment */
- ERR_BADSPECEXPR = 359, /* invalid speculation evaluation */
-
- /* code generation errors */
- ERR_OBJOVF = 400, /* object cannot grow any bigger - code too big */
- ERR_NOLBL = 401, /* no more temporary labels/fixups */
- ERR_LBNOSET = 402, /* (internal error) label never set */
- ERR_INVLSTE = 403, /* invalid datatype for list element */
- ERR_MANYDBG = 404, /* too many debugger line records (internal limit) */
-
- /* vocabulary setup errors */
- ERR_VOCINUS = 450, /* vocabulary being redefined for object */
- ERR_VOCMNPG = 451, /* too many vocwdef pages (internal limit) */
- ERR_VOCREVB = 452, /* redefining same verb */
- ERR_VOCREVB2 = 453, /* redefining same verb - two arguments */
-
- /* set-up errors */
- ERR_LOCNOBJ = 500, /* location of object %s is not an object */
- ERR_CNTNLST = 501, /* contents of object %s is not list */
- ERR_SUPOVF = 502, /* overflow trying to build contents list */
- ERR_RQOBJNF = 503, /* required object %s not found */
- ERR_WRNONF = 504, /* warning - object %s not found */
- ERR_MANYBIF = 505, /* too many built-in functions (internal error) */
-
- /* fio errors */
- ERR_OPWGAM = 600, /* unable to open game for writing */
- ERR_WRTGAM = 601, /* error writing to game file */
- ERR_FIOMSC = 602, /* too many sc's for writing in fiowrt */
- ERR_UNDEFF = 603, /* undefined function */
- ERR_UNDEFO = 604, /* undefined object */
- ERR_UNDEF = 605, /* undefined symbols found */
- ERR_OPRGAM = 606, /* unable to open game for reading */
- ERR_RDGAM = 607, /* error reading game file */
- ERR_BADHDR = 608, /* file has invalid header - not TADS game file */
- ERR_UNKRSC = 609, /* unknown resource type in .gam file */
- ERR_UNKOTYP = 610, /* unknown object type in OBJ resource */
- ERR_BADVSN = 611, /* file saved by different incompatible version */
- ERR_LDGAM = 612, /* error loading object on demand */
- ERR_LDBIG = 613, /* object too big for load region (prob. internal) */
- ERR_UNXEXT = 614, /* did not expect external function */
- ERR_WRTVSN = 615, /* compiler cannot write the requested version */
- ERR_VNOCTAB = 616, /* format version cannot be used with -ctab */
- ERR_BADHDRRSC = 617, /* invalid resource file header in file %s */
- ERR_RDRSC = 618, /* error reading resource file "xxx" */
-
- /* character mapping errors */
- ERR_CHRNOFILE = 700, /* unable to load character mapping file */
-
- /* user interrupt */
- ERR_USRINT = 990, /* user requested cancel of current operation */
-
- /* run-time errors */
- ERR_STKOVF = 1001, /* stack overflow */
- ERR_HPOVF = 1002, /* heap overflow */
- ERR_REQNUM = 1003, /* numeric value required */
- ERR_STKUND = 1004, /* stack underflow */
- ERR_REQLOG = 1005, /* logical value required */
- ERR_INVCMP = 1006, /* invalid datatypes for magnitude comparison */
- ERR_REQSTR = 1007, /* string value required */
- ERR_INVADD = 1008, /* invalid datatypes for '+' operator */
- ERR_INVSUB = 1009, /* invalid datatypes for binary '-' operator */
- ERR_REQVOB = 1010, /* require object value */
- ERR_REQVFN = 1011, /* required function pointer */
- ERR_REQVPR = 1012, /* required property number value */
-
- /* non-error conditions: run-time EXIT, ABORT, ASKIO, ASKDO */
- ERR_RUNEXIT = 1013, /* 'exit' statement executed */
- ERR_RUNABRT = 1014, /* 'abort' statement executed */
- ERR_RUNASKD = 1015, /* 'askdo' statement executed */
- ERR_RUNASKI = 1016, /* 'askio' executed; int arg 1 is prep */
- ERR_RUNQUIT = 1017, /* 'quit' executed */
- ERR_RUNRESTART = 1018, /* 'reset' executed */
- ERR_RUNEXITOBJ = 1019, /* 'exitobj' executed */
-
- ERR_REQVLS = 1020, /* list value required */
- ERR_LOWINX = 1021, /* index value too low (must be >= 1) */
- ERR_HIGHINX = 1022, /* index value too high (must be <= length(list)) */
- ERR_INVTBIF = 1023, /* invalid type for built-in function */
- ERR_INVVBIF = 1024, /* invalid value for built-in function */
- ERR_BIFARGC = 1025, /* wrong number of arguments to built-in */
- ERR_ARGC = 1026, /* wrong number of arguments to user function */
- ERR_FUSEVAL = 1027, /* string/list not allowed for fuse/daemon arg */
- ERR_BADSETF = 1028, /* internal error in setfuse/setdaemon/notify */
- ERR_MANYFUS = 1029, /* too many fuses */
- ERR_MANYDMN = 1030, /* too many daemons */
- ERR_MANYNFY = 1031, /* too many notifiers */
- ERR_NOFUSE = 1032, /* fuse not found in remfuse */
- ERR_NODMN = 1033, /* daemon not found in remdaemon */
- ERR_NONFY = 1034, /* notifier not found in unnotify */
- ERR_BADREMF = 1035, /* internal error in remfuse/remdaemon/unnotify */
- ERR_DMDLOOP = 1036, /* load-on-demand loop: property not being set */
- ERR_UNDFOBJ = 1037, /* undefined object in vocabulary tree */
- ERR_BIFCSTR = 1038, /* c-string conversion overflows buffer */
- ERR_INVOPC = 1039, /* invalid opcode */
- ERR_RUNNOBJ = 1040, /* runtime error: property taken of non-object */
- ERR_EXTLOAD = 1041, /* unable to load external function "%s" */
- ERR_EXTRUN = 1042, /* error executing external function "%s" */
- ERR_CIRCSYN = 1043, /* circular synonym */
- ERR_DIVZERO = 1044, /* divide by zero */
- ERR_BADDEL = 1045, /* can only delete objects created with "new" */
- ERR_BADNEWSC = 1046, /* superclass for "new" cannot be a new object */
- ERR_VOCSTK = 1047, /* insufficient space in parser stack */
- ERR_BADFILE = 1048, /* invalid file handle */
-
- ERR_RUNEXITPRECMD = 1049, /* exited from preCommand */
-
- /* run-time parser errors */
- ERR_PRS_SENT_UNK = 1200, /* sentence structure not recognized */
- ERR_PRS_VERDO_FAIL = 1201, /* verDoVerb failed */
- ERR_PRS_VERIO_FAIL = 1202, /* verIoVerb failed */
- ERR_PRS_NO_VERDO = 1203, /* no verDoVerb for direct object */
- ERR_PRS_NO_VERIO = 1204, /* no verIoVerb for direct object */
- ERR_PRS_VAL_DO_FAIL = 1205, /* direct object validation failed */
- ERR_PRS_VAL_IO_FAIL = 1206, /* indirect object validation failed */
-
- /* compiler/runtime/debugger driver errors */
- ERR_USAGE = 1500, /* invalid usage */
- ERR_OPNINP = 1501, /* error opening input file */
- ERR_NODBG = 1502, /* game not compiled for debugging */
- ERR_ERRFIL = 1503, /* unable to open error capture file */
- ERR_PRSCXSIZ = 1504, /* parse pool + local size too large */
- ERR_STKSIZE = 1505, /* stack size too large */
- ERR_OPNSTRFIL = 1506, /* error opening string capture file */
- ERR_INVCMAP = 1507, /* invalid character map file */
-
- /* debugger errors */
- ERR_BPSYM = 2000, /* symbol not found for breakpoint */
- ERR_BPPROP = 2002, /* breakpoint symbol is not a property */
- ERR_BPFUNC = 2003, /* breakpoint symbol is not a function */
- ERR_BPNOPRP = 2004, /* property is not defined for object */
- ERR_BPPRPNC = 2005, /* property is not code */
- ERR_BPSET = 2006, /* breakpoint already set at this location */
- ERR_BPNOTLN = 2007, /* breakpoint is not at a line (OPCLINE instr) */
- ERR_MANYBP = 2008, /* too many breakpoints */
- ERR_BPNSET = 2009, /* breakpoint to be deleted was not set */
- ERR_DBGMNSY = 2010, /* too many symbols in debug expression (int lim) */
- ERR_NOSOURC = 2011, /* unable to find source file %s */
- ERR_WTCHLCL = 2012, /* illegal to assign to local in watch expr */
- ERR_INACTFR = 2013, /* inactive frame (expression value not available) */
- ERR_MANYWX = 2014, /* too many watch expressions */
- ERR_WXNSET = 2015, /* watchpoint not set */
- ERR_EXTRTXT = 2016, /* extraneous text at end of command */
- ERR_BPOBJ = 2017, /* breakpoint symbol is not an object */
- ERR_DBGINACT = 2018, /* debugger is not active */
- ERR_BPINUSE = 2019, /* breakpoint is already used */
- ERR_RTBADSPECEXPR = 2020, /* invalid speculative expression */
- ERR_NEEDLIN2 = 2021, /* -ds2 information not found - must recompile */
-
- /* usage error messages */
- ERR_TCUS1 = 3000, /* first tc usage message */
- ERR_TCUSL = 3024, /* last tc usage message */
- ERR_TCTGUS1 = 3030, /* first tc toggle message */
- ERR_TCTGUSL = 3032,
- ERR_TCZUS1 = 3040, /* first tc -Z suboptions usage message */
- ERR_TCZUSL = 3041,
- ERR_TC1US1 = 3050, /* first tc -1 suboptions usage message */
- ERR_TC1USL = 3058,
- ERR_TCMUS1 = 3070, /* first tc -m suboptions usage message */
- ERR_TCMUSL = 3076,
- ERR_TCVUS1 = 3080, /* first -v suboption usage message */
- ERR_TCVUSL = 3082,
- ERR_TRUSPARM = 3099,
- ERR_TRUS1 = 3100, /* first tr usage message */
- ERR_TRUSL = 3117,
- ERR_TRUSFT1 = 3118, /* first tr "footer" message */
- ERR_TRUSFTL = 3119, /* last tr "footer" message */
- ERR_TRSUS1 = 3150, /* first tr -s suboptions usage message */
- ERR_TRSUSL = 3157,
- ERR_TDBUSPARM = 3199,
- ERR_TDBUS1 = 3200, /* first tdb usage message */
- ERR_TDBUSL = 3214, /* last tdb usage message */
-
- /* TR 16-bit MSDOS-specific usage messages */
- ERR_TRUS_DOS_1 = 3300,
- ERR_TRUS_DOS_L = 3300,
-
- /* TR 32-bit MSDOS console mode usage messages */
- ERR_TRUS_DOS32_1 = 3310,
- ERR_TRUS_DOS32_L = 3312,
-
- /* TADS/Graphic errors */
- ERR_GNOFIL = 4001, /* can't find graphics file %s */
- ERR_GNORM = 4002, /* can't find room %s */
- ERR_GNOOBJ = 4003, /* can't find hot spot object %s */
- ERR_GNOICN = 4004 /* can't find icon object %s */
-};
-
-/*
- * Special error flag - this is returned from execmd() when preparseCmd
- * returns a command list. This indicates to voc1cmd that it should try
- * the command over again, using the words in the new list.
- */
-#define ERR_PREPRSCMDREDO 30000 /* preparseCmd returned a list */
-#define ERR_PREPRSCMDCAN 30001 /* preparseCmd returned 'nil' to cancel */
-
-union erradef {
- int erraint; // integer argument
- char *errastr; // text string argument
-};
-
-struct errdef {
- errdef * errprv; // previous error frame
- int errcode; // error code of exception being handled
- char errfac[ERRFACMAX+1]; // facility of current error
- erradef erraav[10]; // parameters for error
- int erraac; // count of parameters in argc
-// jmp_buf errbuf; // jump buffer for current error frame
-};
-
-#define ERRBUFSIZ 512
-
-class TADS2;
-
-// seek location record for an error message by number
-struct errmfdef {
- uint errmfnum; // error number
- size_t errmfseek; // seek location of this message
-};
-
-class errcxdef {
-public:
- errdef *errcxptr; // current error frame
- void *errcxlgc; // context for error logging callback
- int errcxofs; // offset in argument buffer
- char errcxbuf[ERRBUFSIZ]; // space for argument strings
- Common::SeekableReadStream *errcxfp; // message file, if one is being used
- errmfdef *errcxseek; // seek locations of messages in file
- uint errcxsksz; // size of errcxseek array
- size_t errcxbase; // offset in physical file of logical error file
- TADS2 * errcxappctx; // host application context
-public:
- /**
- * Format an error message, sprintf-style, using arguments in an
- * erradef array (which is passed to the error-logging callback).
- * Returns the length of the output string, even if the actual
- * output string was truncated because the outbuf was too short.
- * (If called with outbufl == 0, nothing will be written out, but
- * the size of the buffer needed, minus the terminating null byte,
- * will be computed and returned.)
- */
- static int errfmt(char *outbuf, int outbufl, char *fmt, int argc, erradef *argv);
- public:
- errcxdef() : errcxptr(nullptr), errcxlgc(nullptr), errcxofs(0),
- errcxseek(nullptr), errcxsksz(0), errcxbase(0), errcxappctx(nullptr) {
- Common::fill(&errcxbuf[0], &errcxbuf[ERRBUFSIZ], '\0');
- }
-
- /**
- * Error logging method
- */
- void errcxlog(void *ctx0, char *fac, int err, int argc, erradef *argv);
-};
-
-// begin protected code
-#define ERRBEGIN(ctx) \
- { \
- errdef fr_; \
- if ((fr_.errcode = setjmp(fr_.errbuf)) == 0) \
- { \
- fr_.errprv = (ctx)->errcxptr; \
- (ctx)->errcxptr = &fr_;
-
-// end protected code, begin error handler
-#define ERRCATCH(ctx, e) \
- assert(1==1 && (ctx)->errcxptr != fr_.errprv); \
- (ctx)->errcxptr = fr_.errprv; \
- } \
- else \
- { \
- assert(2==2 && (ctx)->errcxptr != fr_.errprv); \
- (e) = fr_.errcode; \
- (ctx)->errcxptr = fr_.errprv;
-
-// retrieve argument (int, string) in current error frame
-#define errargint(argnum) (fr_.erraav[argnum].erraint)
-#define errargstr(argnum) (fr_.erraav[argnum].errastr)
-
-
-#define ERREND(ctx) \
- } \
- }
-
-// end protected code, begin cleanup (no handling; just cleaning up)
-#define ERRCLEAN(ctx) \
- assert((ctx)->errcxptr != fr_.errprv); \
- (ctx)->errcxptr = fr_.errprv; \
- } \
- else \
- { \
- assert((ctx)->errcxptr != fr_.errprv); \
- (ctx)->errcxptr = fr_.errprv;
-
-#define ERRENDCLN(ctx) \
- errrse(ctx); \
- } \
- }
-
-
-
-// argument types for errors with arguments
-#define ERRTINT erraint
-#define ERRTSTR errastr
-
-// set argument count in error frame
-#define errargc(ctx,cnt) ((ctx)->errcxptr->erraac=(cnt))
-
-// enter string argument; returns pointer to argument used in errargv
-#ifdef ERR_NO_MACRO
-char *errstr(errcxdef *ctx, const char *str, int len);
-#else /* ERR_NO_MACRO */
-
-#define errstr(ctx,str,len) \
- ((memcpy(&(ctx)->errcxbuf[(ctx)->errcxofs],str,(size_t)len), \
- (ctx)->errcxofs += (len), \
- (ctx)->errcxbuf[(ctx)->errcxofs++] = '\0'), \
- &(ctx)->errcxbuf[(ctx)->errcxofs-(len)-1])
-
-#endif /* ERR_NO_MACRO */
-
-/* set argument in error frame argument vector */
-#define errargv(ctx,index,typ,arg) \
- ((ctx)->errcxptr->erraav[index].typ=(arg))
-
-// signal an error with argument count already set
-#ifdef ERR_NO_MACRO
-void errsign(errcxdef *ctx, int e, char *facility);
-#else /* ERR_NO_MACRO */
-# ifdef DEBUG
-void errjmp(jmp_buf buf, int e);
-# define errsign(ctx, e, fac) \
- (strncpy((ctx)->errcxptr->errfac, fac, ERRFACMAX),\
- (ctx)->errcxptr->errfac[ERRFACMAX]='\0',\
- (ctx)->errcxofs=0, errjmp((ctx)->errcxptr->errbuf, e))
-# else /* DEBUG */
-# define errsign(ctx, e, fac) \
- (strncpy((ctx)->errcxptr->errfac, fac, ERRFACMAX),\
- (ctx)->errcxptr->errfac[ERRFACMAX]='\0',\
- (ctx)->errcxofs=0, longjmp((ctx)->errcxptr->errbuf, e))
-# endif /* DEBUG */
-#endif /* ERR_NO_MACRO */
-
-
-// signal an error with no arguments
-#ifdef ERR_NO_MACRO
-void errsigf(errcxdef *ctx, char *facility, int err);
-#else /* ERR_NO_MACRO */
-#define errsigf(ctx, fac, e) (errargc(ctx,0),errsign(ctx,e,fac))
-#endif /* ERR_NO_MACRO */
-
-// signal an error with one argument
-#define errsigf1(ctx, fac, e, typ1, arg1) \
- (errargv(ctx,0,typ1,arg1),errargc(ctx,1),errsign(ctx,e,fac))
-
-// signal an error with two arguments
-#define errsigf2(ctx, fac, e, typ1, arg1, typ2, arg2) \
- (errargv(ctx,0,typ1,arg1), errargv(ctx,1,typ2,arg2), \
- errargc(ctx,2), errsign(ctx,e,fac))
-
-// resignal the current error - only usable within exception handlers
-#ifdef ERR_NO_MACRO
-void errrse1(errcxdef *ctx, errdef *fr);
-# define errrse(ctx) errrse1(ctx, &fr_)
-#else /* ERR_NO_MACRO */
-
-// void errrse(errcxdef *ctx);
-# define errrse(ctx) \
- (errargc(ctx, fr_.erraac),\
- memcpy((ctx)->errcxptr->erraav, fr_.erraav, \
- (size_t)(fr_.erraac*sizeof(erradef))),\
- errsign(ctx, fr_.errcode, fr_.errfac))
-
-#endif /* ERR_NO_MACRO */
-
-/**
- * For use in an error handler (ERRCATCH..ERREND) only: Copy the
- * parameters from the error currently being handled to the enclosing
- * frame. This is useful when "keeping" an error being handled - i.e.,
- * the arguments will continue to be used outside of the
- * ERRCATCH..ERREND code.
- */
-#define errkeepargs(ctx) errcopyargs(ctx, &fr_)
-
-/**
- * copy the parameters for an error from another frame into the current
- * frame - this can be used when we want to be able to display an error
- * that occurred in an inner frame within code that is protected by a
- * new enclosing error frame
- */
-#define errcopyargs(ctx, fr) \
- (errargc((ctx), (fr)->erraac), \
- memcpy((ctx)->errcxptr->erraav, (fr)->erraav, \
- (size_t)((fr)->erraac*sizeof(erradef))))
-
-// log error that's been caught, using arguments already caught
-#define errclog(ctx) \
- ((*(ctx)->errcxlog)((ctx)->errcxlgc,fr_.errfac,fr_.errcode,\
- fr_.erraac,fr_.erraav))
-
-// log an error that's been set up but not signalled yet
-#define errprelog(ctx, err) \
- ((*(ctx)->errcxlog)((ctx)->errcxlgc,(ctx)->errcxptr->errfac,\
- err,(ctx)->errcxptr->erraac,\
- (ctx)->errcxptr->erraav))
-
-// log an error (no signalling, just reporting)
-#ifdef ERR_NO_MACRO
-void errlogn(errcxdef *ctx, int err, char *facility);
-#else /* ERR_NO_MACRO */
-
-#define errlogn(ctx,err,fac) \
- ((ctx)->errcxofs=0,\
- (*(ctx)->errcxlog)((ctx)->errcxlgc,fac,err,(ctx)->errcxptr->erraac,\
- (ctx)->errcxptr->erraav))
-
-#endif /* ERR_NO_MACRO */
-
-// log an error with no arguments
-#ifdef ERR_NO_MACRO
-void errlogf(errcxdef *ctx, char *facility, int err);
-#else /* ERR_NO_MACRO */
-
-// void errlogf(errcxdef *ctx, char *facility, int err);
-#define errlogf(ctx,fac,err) (errargc(ctx,0),errlogn(ctx,err,fac))
-
-#endif /* ERR_NO_MACRO */
-
-// log an error with one argument
-#define errlogf1(ctx, fac, e, typ1, arg1) \
- (errargv(ctx,0,typ1,arg1),errargc(ctx,1),errlogn(ctx,e,fac))
-
-// log an error with two arguments
-#define errlogf2(ctx, fac, e, typ1, arg1, typ2, arg2) \
- (errargv(ctx,0,typ1,arg1),errargv(ctx,1,typ2,arg2),\
- errargc(ctx,2),errlogn(ctx,e,fac))
-
-/**
- * For compatility with old facility-free mechanism, signal with facility "TADS"
- */
-#define errsig(ctx, err) errsigf(ctx, "TADS", err)
-#define errsig1(c, e, t, a) errsigf1(c,"TADS",e,t,a)
-//#define errsig2(c, e, t1, a1, t2, a2) errsigf2(c,"TADS",e,t1,a1,t2,a2)
-#define errlog(c, e) errlogf(c, "TADS", e)
-#define errlog1(c, e, t, a) errlogf1(c,"TADS",e,t,a)
-#define errlog2(c, e, t1, a1, t2, a2) errlogf2(c,"TADS",e,t1,a1,t2,a2)
-
-#define errsig2(c, e, t1, a1, t2, a2) error("Error occurred")
-
-// get the text of an error
-void errmsg(errcxdef *ctx, char *outbuf, uint outbufl, uint err);
-
-// initialize error subsystem, opening error message file if necessary
-void errini(errcxdef *ctx, Common::SeekableReadStream *fp);
-
-// allocate and initialize error context, free error context
-errcxdef *lerini();
-void lerfre(errcxdef *ctx);
-
-// error message structure - number + text
-struct errmdef {
- uint errmerr; // error number
- char *errmtxt; // text of error message
-};
-
-} // End of namespace TADS2
-} // End of namespace TADS
-} // End of namespace Glk
-
-#endif