% $Header: c:/tads/doc/RCS/tadserr.tex 1.2 92/11/13 16:45:20 mroberts Exp $
% TADS Documentation, Appendix E:  Errors
%
% Copyright (c) 1989 by Michael J. Roberts.  All Rights Reserved.

\chapterheader{Appendix E}{Errors}{E}

This chapter describes how the compiler and run-time system handle
errors.  A list of errors is provided.\bull

\chapterbody

\majorsection{Errors and Error Recovery}

When the TADS ^{Compiler} detects a syntax or other ^{error}
in your source file,
it attempts to skip ahead to the end of the offending program section.
Unfortunately, because the program has a problem, TADS sometimes becomes
confused and issues several spurious error messages that are all really
due to the original error.

When compiling code, such as inside a method, TADS will try to skip the
statement that caused the error; it simply looks for the semicolon that
ends the statement.  This strategy is most likely to backfire when the
error was due to a missing semicolon in the first place.

When compiling an object definition outside of code, TADS will skip the
entire object that caused the error.  Again, it skips ahead to the next
semicolon.  If program code intervenes, this often results in more errors;
these errors are generally of the form ``Expected object or function
definition."  You can normally ignore such errors when several of them
occur consecutively, and look only at
the first error which started the trouble, since the subsequent errors may
be part of the compiler's attempts to recover from the original error.
Once an object or function definition does show up, TADS will normally
stop complaining.

\minorsection{Classes of Errors}

TADS has four classes of errors.  TADS recovers from errors based on their
class.

A {\bf ^{fatal error}} is one from which the compiler is totally unable to
recover; these are generally due to missing files or lack of memory.
TADS cannot continue operating after a fatal error, so it terminates.

A {\bf ^{compile-time error}} results when the compiler detects a problem with
your source code, such as a syntax error, or an undefined symbol.  TADS
attempts to recover from these errors by skipping the section of code that
had the error.  When a compile-time error is found in your source code,
even though the compiler will continue to process your game, you won't
be able to run the game until you have fixed the error.

A {\bf ^{warning}} is generated when the compiler detects a questionable
construct and wishes to bring it to your attention.  Warnings do not
otherwise affect compilation; they are produced purely for your information.
You should carefully check each warning message to ensure that it's not
justified before choosing to ignore it.

A {\bf ^{run-time error}} is produced when your program, while it's running,
does something illegal, such as adding two objects together; these errors
cannot be detected during compilation, because they depend on the state
of your program as it runs.  If you have compiled your program with
source-level debugging information,
TADS will automatically produce a symbolic trace
showing the function or method that was executing when the error occurred,
as well as the function or method that called it, and so forth.  When
debugging information is not present, TADS will only be able to show
the error message, and won't be able to provide any information on where
it occurred.  After a run-time error has
occurred, TADS will attempt to continue executing your game by dropping what
it was doing when the error occurred and returning to the player command line.

\majorsection{Error Listing}

This section lists the errors that TADS generates.  In addition,
we explain the conditions that give rise to the errors, and what steps to
take to fix them.

To make it easier for you to find information on an error in this
book, all TADS errors and warning messages are numbered.  When TADS
displays an error, it will preface the message with a code such as
``TADS-382''; you can use the number in this error code to find the
description of the error in the numerically sorted listing in this
section.

\def\tadsmessage#1#2{%
\filbreak\medskip\parindent=1in\par\noindent{\bf TADS-#1: #2}\par\hang}
\def\errorsection{
\begingroup
  \parindent=1in
  \parskip=0pt
  \def\enderror{\endgroup}
}

\errorsection

% message #1
\tadsmessage{1}{out of memory}
The program has run out of memory.  Even though TADS uses a virtual
memory subsystem that allows your game to exceed available memory by
swapping portions of memory to a disk file, TADS allocates a certain
amount of memory that cannot be swapped to disk.  As TADS executes,
it extends the size of the virtual object cache, and also allocates
fixed (unswapped) memory.  It is possible for the cache to grow so
large that additional fixed memory cannot be allocated; when this
happens, TADS runs out of memory and can't continue.  When this
error occurs, the TADS compiler will display a message indicating
the size of the virtual object cache; you should re-run the compiler
with a smaller setting for the {\tt ^{-m}} (cache size limit)
option.  See appendix C of this manual for details.

% message #2
\tadsmessage{2}{error seeking in file}
An operating system error occurred seeking in a file.  This usually
indicates an internal problem with TADS.

% message #3
\tadsmessage{3}{error reading from file}
An operating system error occurred reading from a file.  This usually
indicates an internal problem with TADS.

% message #4
\tadsmessage{4}{no more page slots}
The virtual memory subsystem does not have any more space for
allocating internal tables to track virtual memory objects.  The
internal limits are high enough that this error should never
occur.

% message #5
\tadsmessage{5}{attempting to reallocate a locked object}
This error indicates an internal problem with TADS.

% message #6
\tadsmessage{6}{swapfile limit reached - out of virtual memory}
The limit you specified with the {\tt ^{-ts}} option for the size
of the swap file has been reached.  You should raise or remove
this limit.

% message #7
\tadsmessage{7}{error writing file}
An operating system error has occurred writing a file.  This
usually indicates that the disk is full.  You should try to make
more space available by deleting files if possible, or by using
another disk with more space available.

% message #8
\tadsmessage{8}{exceeded swap page table limit}
The compiler has reached its internal limit for memory to track
objects swapped out to disk.  This limit is high enough that
this error should never occur.

% message #9
\tadsmessage{9}{requested client object number already in use}
This error indicates an internal problem with TADS.

% message #10
\tadsmessage{10}{client mapping table is full}
The compiler has reached an internal limit.  This limit is
high enough that this error should never occur.

% message #11
\tadsmessage{11}{no memory, even after swapping/garbage collection}
The virtual object cache is full or too fragmented to allocate
needed memory.  The most likely problem is that the cache is
too small; increasing the size of the cache (specified with
the {\tt ^{-m}} compiler and run-time options) should alleviate
this problem.

% message #12
\tadsmessage{12}{no memory to resize (expand) an object}
The virtual object cache is full.  See error 11 above.

% message #13
\tadsmessage{13}{unable to open swap file}
The swap file cannot be created.  This could mean that the filename
is invalid, or the indicated device (volume) or directory does not
exist, or that the disk is full or write-protected.

% message #14
\tadsmessage{14}{can't get a new object header}
The virtual memory subsystem has run out of memory.  See error 11
above.

% message #15
\tadsmessage{15}{mcm cannot find object to load (internal error)}
This error indicates an internal problem with TADS.

% message #16
\tadsmessage{16}{attempting to free a locked object (internal error)}
This error indicates an internal problem with TADS.

% message #100
\tadsmessage{100}{invalid token}
Your source file contains a character that TADS does not recognize.

% message #101
\tadsmessage{101}{end of file while scanning string}
Your source file ends within a quoted string.  This usually indicates
that you left out the closing quote of a string somewhere in the file.

% message #102
\tadsmessage{102}{symbol too long - truncated to ``{\it xxx}''}
The indicated symbol is too long.  Processing can continue, but TADS
will only pay attention to the truncated version.

% message #103
\tadsmessage{103}{no space in local symbol table}
The local symbol table is full.  You can increase the amount of
space available for local symbols with the {\tt ^{-ml}} compiler
option; see appendix C.

% message #104
\tadsmessage{104}{invalid preprocessor (\#) directive}
You have specified an invalid preprocessor directive.  When a
pound sign ({\tt \#}) occurs in the first column of your source
file, the compiler expects a valid preprocessing directive
(such as {\tt include}) to follow.

% message #105
\tadsmessage{105}{no filename in \#include directive}
You have specified a {\tt \#include} directive with no filename.
The filename must occur on the same line as the {\tt \#include}
directive, and must be enclosed in double quotes or angle brackets.

% message #106
\tadsmessage{106}{invalid \#include syntax}
The {\tt \#include} directive must be followed on the same line
by a filename enclosed in double quotes or angle brackets.

% message #107
\tadsmessage{107}{can't find included file ``{\it xxx}''}
The compiler could not open the specified include file.  Check
to make sure that the file is in one of the directories
specified with the {\tt ^{-i}} compiler options (see appendix C).

% message #108
\tadsmessage{108}{no matching delimiter in \#include filename}
The filename of a {\tt \#include} directive was not properly
terminated with a double quote or right angle bracket.

% message #109
\tadsmessage{109}{out of space for symbol table expansion}
The symbol table is too large.  Since the symbol table is stored
in the virtual object cache, this generally indicates that the
compiler is out of cache memory.

% message #110
\tadsmessage{110}{input line is too long}
Your input file contains a line that is too long.  The compiler can
handle extremely long lines (up to about 16,000 characters).  Break
the long line into two or more lines.

% message #111
\tadsmessage{111}{warning: file ``{\it xxx}'' already included; \#include ignored}
The specified file has already been included and will not be included
again.  This warning is most often issued when using pre-compiled
header files (see appendix C), and is almost always harmless.

% message #200
\tadsmessage{200}{operation is too big for undo log}
A single run-time operation has exceeded the size of the undo log.
The undo log will be discarded, since it can no longer be used to
roll back game state.

% message #201
\tadsmessage{201}{no more undo information}
No more undo information is available in the undo log.  This
means that you have applied all undo information, and cannot
undo any more turns.

% message #202
\tadsmessage{202}{incomplete undo (no previous savepoint)}
While attempting to roll back to a savepoint, the undo log
ran out of information.  This means that a turn may be partially
undone.

% message #300
\tadsmessage{300}{expected {\it token}}
The compiler requires the specified token.  Insert the required
token.

% message #301
\tadsmessage{301}{expected a symbol}
The compiler requires a symbol in this context, and found something else.

% message #302
\tadsmessage{302}{expected a property name}
The compiler requires a property name in this context, and found something
else.

% message #303
\tadsmessage{303}{expected an operand}
The compiler requires an operand in an expression, and found
something else.

% message #304
\tadsmessage{304}{expected a comma or closing paren (in arg list)}
Your program has a syntax error in an argument list; variables
must be separated by commas, and the argument list must be terminated
with a right parenthesis.

% message #305
\tadsmessage{305}{no space for new parse node}
The compiler is out of space parsing an expression.  This can sometimes
happen with very long strings, especially those that contain embedded
expressions.  Use the compiler's {\tt ^{-mp}} switch to increase
the amount of space available for expression parsing.

% message #306
\tadsmessage{306}{expected object name}
The compiler requires an object name in this context.

% message #307
\tadsmessage{307}{redefining symbol as external function}
You have declared a symbol as an external function when it already
has been declared as another type.

% message #308
\tadsmessage{308}{redefining symbol as function}
You have declared a symbol as a function when it already has
been declared as another type.

% message #309
\tadsmessage{309}{can't use ``class'' with function/external function}
You have specified the {\tt class} keyword in a function or external
function declaration, which is not allowed (because it makes no sense).

% message #310
\tadsmessage{310}{unary operator required}
Your expression requires a unary operator (that is, an operator
which takes a single operand, such as {\tt -} or {\tt not}).

% message #311
\tadsmessage{311}{binary operator required}
Your expression requires a binary operator (that is, an operator
which takes two operands, such as {\tt *} or {\tt and}).

% message #312
\tadsmessage{312}{invalid binary operator}
You have specified an invalid binary operator.

% message #313
\tadsmessage{313}{invalid assignment}
You have used an invalid expression on the left hand side of
an assignment operator ({\tt :=}).  You can only assign values to
local variables, properties, and list elements.  It is invalid,
for example, to assign a value to an expression such as {\tt (1+1)}.

% message #314
\tadsmessage{314}{variable name required}
The compiler requires a variable name in this context.

% message #315
\tadsmessage{315}{comma or semicolon required in local list}
Variables declared in a {\tt local} statement must be separated
by commas, and the list must be terminated by a semicolon.

% message #316
\tadsmessage{316}{right brace required (eof before end of group)}
Your source file is missing the right brace to close a statement block.

% message #317
\tadsmessage{317}{`break' without `while'}
The {\tt break} statement can only occur within a {\tt while},
{\tt for}, {\tt do}, or {\tt case} statement.  Your source file contains
a {\tt break} statement that is not associated with one of these
statements.

% message #318
\tadsmessage{318}{`continue' without `while'}
The {\tt continue} statement can only occur within a {\tt while},
{\tt for}, or {\tt do} statement.

% message #319
\tadsmessage{319}{`else' without `if'}
Your source file contains an {\tt else} that is not associated with
an {\tt if} statement.  Note that TADS version 1 ignored a semicolon
between a closing brace and an {\tt else} keyword; in version 2, the
semicolon is considered a null statement which terminates the {\tt if}
statement.  If your program compiled correctly with TADS version 1 but
encounteres error 319 with TADS version 2, you should specify the
{\tt ^{-1e}} compiler option, which will cause the compiler to adopt
the behavior of version 1 with respect to this construct.  See
appendix C for details.

% message #320
\tadsmessage{320}{warning: possible use of `=' where `:=' intended}
The compiler has detected a statement which it suspects is an
assignment that has been accidentally miscoded with ``{\tt =}''
(which is the relational equality comparison operator)
instead of ``{\tt :=}'' (the assignment operator).  The compiler
is almost always right in these situations; you should check the
statement to ensure that you coded what you really meant.

% message #321
\tadsmessage{321}{unexpected end of file}
The compiler has encountered the end of your source file when
it thought it had more work to do.  This could mean that you have
left off the semicolon terminating an object definition, or a right
brace terminating a function.

% message #322
\tadsmessage{322}{general syntax error}
The compiler has detected an ill-formed statement.

% message #323
\tadsmessage{323}{invalid operand type}
One of the operands in an expression is not suitable for the
operator.  This usually means that a constant in the expression
is of the wrong type.

% message #324
\tadsmessage{324}{can't expand local symbol table}
The compiler cannot allocate space for a new local symbol table.
You should specify a larger value with the compiler's {\tt ^{-ml}}
option (see appendix C).

% message #325
\tadsmessage{325}{can't expand argument symbol table}
The compiler cannot allocate space for a new argument symbol table.
You should specify a larger value with the compiler's {\tt ^{-ml}}
option (see appendix C).

% message #326
\tadsmessage{326}{redefining a function which is already defined}
You are attempting to define a function twice.

% message #327
\tadsmessage{327}{`case' or `default' not in switch block}
You have coded a {\tt case} or {\tt default} label outside of
a {\tt switch} statement.

% message #328
\tadsmessage{328}{constant required in switch case value}
The values in {\tt case} labels must be constants.  You have
specified a non-constant expression as a {\tt case} label.

% message #329
\tadsmessage{329}{label required for `goto'}
You have omitted the label of a {\tt goto} statement, or the
symbol specified is something other than a label.

% message #330
\tadsmessage{330}{`goto' label never defined}
A label used in a {\tt goto} statement is not defined within
the function or method in which the {\tt goto} statement occurred.
The {\tt goto} statement can only be used with labels within the
same function or method as the {\tt goto} statement itself.

% message #331
\tadsmessage{331}{too many superclasses for object}
You have specified too many superclasses in an object definition.

% message #332
\tadsmessage{332}{redefining symbol as object}
You are attempting to define a symbol as an object, but you
have already defined the symbol as something else.

% message #333
\tadsmessage{333}{property being redefined in object}
You are attempting to define a symbol as an object, but the
symbol has already been used as a property.

% message #334
\tadsmessage{334}{invalid property value}
The value specified for a property's initial value in an object
definition is not valid.

% message #335
\tadsmessage{335}{invalid vocabulary property value}
The value specified for a vocabulary property is invalid.  You
can only use single-quoted strings for vocabulary properties.

% message #336
\tadsmessage{336}{invalid template property value (need string)}
The value specified for a template is invalid.  You can only
use a single-quoted string for a template property.

% message #337
\tadsmessage{337}{template base property name too long}
The base name of a template property value is too long.
Since these values must be appended to the strings {\tt do},
{\tt verDo}, {\tt io}, and {\tt verIo}, the resulting symbols
will be up to five characters longer than the property value
itself.

% message #338
\tadsmessage{338}{too many templates (internal compiler limit)}
You have defined an object with too many templates.

% message #339
\tadsmessage{339}{invalid value for compound word (string required)}
You have specified something other than a single-quoted string
in a {\tt compoundWord} definition.

% message #340
\tadsmessage{340}{invalid value for format string (string required)}
You have specified something other than a single-quoted string
in a {\tt formatString} definition.

% message #341
\tadsmessage{341}{invalid value for synonym (string required)}
You have specified something other than a single-quoted string
in a synonym definition.

% message #342
\tadsmessage{342}{undefined symbol}
You have referenced a symbol which has not been defined.

% message #343
\tadsmessage{343}{invalid value for specialWords list (string required)}
You have specified something other than a single-quoted string
in a {\tt specialWords} list.

% message #400
\tadsmessage{400}{object cannot grow any bigger - code too big}
The object is too large.  This is unlikely to occur, since the
limit on the size of an object is very high; however, if it does,
you can break the object up into two or more objects, with the
first object inheriting from the second.

% message #401
\tadsmessage{401}{no more temporary labels/fixups (internal compiler limit)}
The compiler has run out of space during code generation.  You should
reduce the complexity of your code (for example, reduce the nesting
of loops and conditional statements).

% message #402
\tadsmessage{402}{(internal error) label never set}
This error indicates an internal problem with TADS.

% message #403
\tadsmessage{403}{invalid datatype for list element}
A list element is of an invalid type.

% message #404
\tadsmessage{404}{too many debugger source line records (internal limit)}
Your source program has generated too many debugger source line
records.  This is an internal TADS limit; the limit is high
enough that this error should never occur.

% message #450
\tadsmessage{450}{vocabulary being redefined for object}
You have defined a vocabulary word more than once for a particular object.

% message #500
\tadsmessage{500}{location of object ``{\it xxx}'' is not an object}
This is a warning.  In most cases, you want an object's {\tt location}
property to refer directly to another object, since this allows the
compiler to generate a matching {\tt contents} property automatically.
Under certain conditions, you may intentionally use a method for a
{\tt location} value.  When you have intentionally coded something
other than an object for a {\tt location} value, you can add the
property {\tt locationOK = true} to the object, which will suppress
this warning message.

% message #501
\tadsmessage{501}{contents of object ``{\it xxx}'' is not list}
You should almost never code a {\tt contents} property for an object,
since the compiler automatically sets up these properties.

% message #502
\tadsmessage{502}{overflow trying to build contents list}
A {\tt contents} property list has grown too long.  This is an
internal limit; move some of the contents of the object somewhere
else.

% message #503
\tadsmessage{503}{required object ``{\it xxx}'' not found}
The specified object has not been defined in your game, but the
TADS compiler requires you to define it.

% message #504
\tadsmessage{504}{warning - object ``{\it xxx}'' not found}
The specified object has not been defined by your game.  This is
not an error, because the object is not required by TADS; however,
TADS generates this warning in case you thought you had declared
this object.

% message #505
\tadsmessage{505}{too many built-in functions (internal error)}
This indicates an internal problem with TADS.

% message #600
\tadsmessage{600}{unable to open game for writing}
The game binary file could not be created.  This could mean that
the name is invalid, or the device (volume) or directory is invalid
or does not exist, or that the disk is full or write-protected.

% message #601
\tadsmessage{601}{error writing to game file}
An operating system error occurred writing to the game file.  This
usually means that the disk is full.

% message #602
\tadsmessage{602}{too many sc's for writing in fiowrt}
This indicates an internal problem with TADS.

% message #603
\tadsmessage{603}{undefined function ``{\it xxx}''}
The specified function was called or declared, but never defined.

% message #604
\tadsmessage{604}{undefined object ``{\it xxx}''}
The specified object was referenced, but never defined.

% message #605
\tadsmessage{605}{undefined symbols found}
One or more undefined symbols was found in your program.

% message #606
\tadsmessage{606}{unable to open game for reading}
The game binary file couldn't be opened.  This could mean that
the file does not exist, or that the filename is invalid, or that
the device (volume) or directory is invalid or does not exist.

% message #607
\tadsmessage{607}{error reading game file}
An operating system error has occurred reading the game file.
This could mean that the file has been corrupted.

% message #608
\tadsmessage{608}{file has invalid header - not a TADS game file}
The specified binary game file is not a TADS game file.  This
could mean that you have specified the incorrect file, or that
the file has become corrupted.

% message #609
\tadsmessage{609}{unknown resource type in .gam file}
The game file contains invalid data.  This could mean that the
file has become corrupted.

% message #610
\tadsmessage{610}{unknown object type in OBJ resource}
The game file contains invalid data.  This could mean that the
file has become corrupted.

% message #611
\tadsmessage{611}{file saved by different (incompatible) version}
The game file or save file was created by an incompatible version
of TADS or of the game.  You should either use the version of the
TADS run-time that matches the version used to compile the game,
or you should recompile the game with a compiler that matches your
run-time.

% message #612
\tadsmessage{612}{error loading object on demand}
An object could not be loaded.  This could mean that the game
file is corrupted, or that the disk file has become unavailable
(for example, you have removed the floppy on which the game file
was stored from the disk drive).

% message #613
\tadsmessage{613}{object too big for load region (internal error)}
This indicates an internal problem with TADS.

% message #614
\tadsmessage{614}{did not expect external function}
This indicates an internal problem with TADS.

% message #990
\tadsmessage{990}{user requested cancel of current operation}
You have cancelled compilation of your game, such as by hitting
the ``cancel'' button on the Macintosh compiler.

% message #1001
\tadsmessage{1001}{stack overflow}
Run-time stack space has been exceeded.  This usually means that
your program has gone into infinite recursion---that is, a function
is calling itself repeatedly.  If the program appears to be behaving
correctly, you can increase the size of the run-time stack with the
{\tt ^{-ms}} run-time parameter (see appendix D).

% message #1002
\tadsmessage{1002}{heap overflow}
Run-time heap space has been exceeded.  You can increase the size
of the run-time heap with the {\tt ^{-mh}} option (see appendix D).

% message #1003
\tadsmessage{1003}{numeric value required}
A run-time operation that requires a numeric value was invoked
with some other type of value.

% message #1004
\tadsmessage{1004}{stack underflow}
Too many elements have been removed from the run-time stack.  This
usually indicates that you have called a function with an invalid
number of arguments.

% message #1005
\tadsmessage{1005}{logical value required}
A run-time operation that requires a logical value {\tt true} or {\tt nil}
was invoked
with some other type of value.

% message #1006
\tadsmessage{1006}{invalid datatypes for magnitude comparison}
A magnitude comparision operator ({\tt >}, {\tt <}, {\tt >=}, or {\tt <=})
was called with something other than a number or string.

% message #1007
\tadsmessage{1007}{string value required}
A run-time operation that requires a string value was invoked
with some other type of value.

% message #1008
\tadsmessage{1008}{invalid datatypes for binary `+' operator}
The binary ``{\tt +}'' operator works only on strings, lists, and numbers.

% message #1009
\tadsmessage{1009}{invalid datatypes for binary `-' operator}
The binary ``{\tt -}'' operator works only on lists and numbers.

% message #1010
\tadsmessage{1010}{object value required}
A run-time operation that requires an object value was invoked
with some other type of value.

% message #1011
\tadsmessage{1011}{function pointer required}
A run-time operation that requires a function pointer value was invoked
with some other type of value.

% message #1012
\tadsmessage{1012}{property pointer value required}
A run-time operation that requires a property pointer value was invoked
with some other type of value.

% message #1013
\tadsmessage{1013}{`exit' statement executed}
If this error occurs, it indicates an internal problem with TADS.

% message #1014
\tadsmessage{1014}{`abort' statement executed}
If this error occurs, it indicates an internal problem with TADS.

% message #1015
\tadsmessage{1015}{`askdo' statement executed}
If this error occurs, it indicates an internal problem with TADS.

% message #1016
\tadsmessage{1016}{`askio' executed; preposition is object \#{\it n}}
If this error occurs, it indicates an internal problem with TADS.

% message #1017
\tadsmessage{1017}{`quit' executed}
If this error occurs, it indicates an internal problem with TADS.

% message #1018
\tadsmessage{1018}{`reset' executed}
If this error occurs, it indicates an internal problem with TADS.

% message #1020
\tadsmessage{1020}{list value required}
A run-time operation that requires a list value was invoked
with some other type of value.

% message #1021
\tadsmessage{1021}{index value too low (must be {\tt >=} 1)}
The value of a list index operation was below 1.

% message #1022
\tadsmessage{1022}{index value too high (must be {\tt <=} length(list))}
The value of a list index operation was higher than the number
of elements in the list.

% message #1023
\tadsmessage{1023}{invalid type for built-in function}
Your program called a built-in function with the incorrect type
of arguments.

% message #1024
\tadsmessage{1024}{invalid value for built-in function ``{\it xxx}''}
Your program called a built-in function with the incorrect type
of arguments.

% message #1025
\tadsmessage{1025}{wrong number of arguments to built-in}
Your program called a built-in function with the incorrect number
of arguments.

% message #1026
\tadsmessage{1026}{wrong number of arguments to user function}
Your program called one of its own functions or methods with the
incorrect number of arguments.

% message #1027
\tadsmessage{1027}{string/list not allowed for fuse/daemon arg}
The parameter to a fuse or daemon (specified in a {\tt setdaemon()} or
{\tt setfuse()} call) cannot be a string or a list.

% message #1028
\tadsmessage{1028}{internal error in setfuse/setdaemon/notify}
This indicates an internal problem with TADS.

% message #1029
\tadsmessage{1029}{too many fuses}
You have attempted to register too many fuses simultaneously.

% message #1030
\tadsmessage{1030}{too many daemons}
You have attempted to register too many daemons simultaneously.

% message #1031
\tadsmessage{1031}{too many notifiers}
You have attempted to register too many notifiers simultaneously.

% message #1032
\tadsmessage{1032}{fuse not found in remfuse}
You have tried to remove a fuse that is not active.

% message #1033
\tadsmessage{1033}{daemon not found in remdaemon}
You have tried to remove a daemon that is not active.

% message #1034
\tadsmessage{1034}{notifier not found in unnotify}
You have tried to remove a notifier that is not active.

% message #1035
\tadsmessage{1035}{internal error in remfuse/remdaemon/unnotify}
This indicates an internal problem with TADS.

% message #1036
\tadsmessage{1036}{load-on-demand loop: property not being set (internal)}
This indicates an internal problem with TADS.

% message #1037
\tadsmessage{1037}{undefined object in vocabulary tree}
This indicates that a superclass object has not been defined.

% message #1038
\tadsmessage{1038}{c-string conversion overflows buffer (internal limit)}
This indicates an internal problem with TADS.

% message #1039
\tadsmessage{1039}{invalid opcode (internal error)}
This indicates an internal problem with TADS, or a corrupted
game file.

% message #1040
\tadsmessage{1040}{property evaluated for non-existent object}
You have attempted to take a property of an object which has not
been defined.  This probably means that you are attempting to
execute a game with compiler errors.

% message #1041
\tadsmessage{1041}{unable to load external function ``{\it xxx}''}
The specified external function (user exit) is not available,
because it has not been added to the game with the proper
resource compiler (or other appropriate operating system-dependent
mechanism).  See appendix F for information on writing external functions.

% message #1042
\tadsmessage{1042}{error executing external function ``{\it xxx}''}
The specified external function cannot be executed.  See appendix F
for information on writing external functions.

% message #1043
\tadsmessage{1043}{circular synonym}
You have declared a synonym which refers to another synonym which
refers to the original synonym.

% message #1500
\tadsmessage{1500}{invalid command-line usage}
You have specified invalid command line arguments.  This error will
always be accompanied with an informational message describing the
proper command line arguments.

% message #1501
\tadsmessage{1501}{error opening input file}
The debugger could not open the specified input file.

% message #1502
\tadsmessage{1502}{game not compiled for debugging - use -ds option}
You must use the {\tt ^{-ds}} option when compiling your game if
you wish to use it with the debugger.

% message #2000
\tadsmessage{2000}{error setting breakpoint:  unknown symbol}
You have attempted to set a breakpoint on a non-existent symbol.

% message #2001
\tadsmessage{2001}{I'm afraid I can't do that, Dave}
^^{H{\smallcaps AL} 9000}
The pod bay doors could not be opened.  Check the AE-35 unit for
a possible malfunction.

% message #2002
\tadsmessage{2002}{error setting breakpoint:  symbol is not a property}
The specified symbol is not a property.

% message #2003
\tadsmessage{2003}{error setting breakpoint:  symbol is not a function}
The specified symbol is not a function.

% message #2004
\tadsmessage{2004}{error setting breakpoint:  property not defined in object}
The specified property is not defined in the specified object.

% message #2005
\tadsmessage{2005}{error setting breakpoint:  property is not code}
The specified property is not code, but some other type of value.
Breakpoints can only be set in executable code.

% message #2006
\tadsmessage{2006}{error:  breakpoint is already set at this location}
You have attempted to set more than one breakpoint at the same location.

% message #2007
\tadsmessage{2007}{error setting breakpoint:  breakpoint not at line}
You have attempted to set a breakpoint somewhere other than at
a code location associated with a source line.

% message #2008
\tadsmessage{2008}{too many breakpoints}
The debugger cannot set any more breakpoints.  You must remove one
or more breakpoints before additional breakpoints can be set.

% message #2009
\tadsmessage{2009}{breakpoint was not set}
The breakpoint could not be set as requested.

% message #2010
\tadsmessage{2010}{too many symbols in eval expression (internal limit)}
You have specified an excessively complex expression.  Simplify
the expression.

% message #2011
\tadsmessage{2011}{unable to find source file ``{\it xxx}''}
The specified source file cannot be opened.

% message #2012
\tadsmessage{2012}{assignment to local is illegal in watch expression}
You cannot make an assignment to a local variable within a
watch expression.

% message #2013
\tadsmessage{2013}{inactive frame (expression value not available)}
The specified frame can not be accessed because it is no longer
active.  The value of the expression can not be obtained.

% message #2014
\tadsmessage{2014}{too many watch expressions}
You must remove one or more watch expressions before setting
additional watch expressions.

% message #2015
\tadsmessage{2015}{watch expression not set}
The requested watch expression could not be set.

% message #2016
\tadsmessage{2016}{extraneous text after end of command}
Your command has extra text past the end that the debugger
did not understand.

% message #2017
\tadsmessage{2017}{error setting breakpoint:  symbol is not an object}
The specified symbol is not an object.

% end messages
% end messages

\enderror

\endchapter

A book may be very amusing with numerous errors,
or it may be very dull without a single absurdity.
\author OLIVER GOLDSMITH, {\sl The Vicar of Wakefield\/} (1766)

\eject
