REF MISHAP_CODES A.Law, A.Sloman, S.Hardy, R.Barrett, A.Morris,
J.Laventhol, J.Gibson & I.Rogers : Feb 82 - Aug 90
Updated Adrian Howard Sep 90
COPYRIGHT University of Sussex 1990. All Rights Reserved.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<< MISHAP CODES >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Some mishap messages start with a string of characters representing a
code for the error. This file contains a summary of those codes, and a
fuller explanation of their meaning. The system specific error codes are
given separately from those which are common to the entire Poplog
system.
CONTENTS - (Use <ENTER> g to access required sections)
1 General error codes
2 X Windows error codes
3 System dependent error codes
----------------------
1 General error codes
----------------------
crsv [error_code]
can't restore saved image
The mishap
crsv: CAN'T RESTORE - NOT SAME SYSTEM AND VERSION
means that a saved image cannot be restored because the Poplog
system on which the image was built is different from the one
you are trying to restore it into, i.e. it has a different
pop_system_version string.
In VMS Poplog, the mishap
crsv: CAN'T RESTORE - VMS SHAREABLE IMAGES HAVE EXPANDED,
NEED TO REBUILD SAVED IMAGE
occurs because the size of the VMS shareable images used by
Poplog is greater in the current version of VMS than it was in
the version under which the saved image was built, and an
insufficient expansion margin was allowed. The mishap prints out
INVOLVING: 'expansion margin allowed A%, needed N%'
where A was the expansion margin allowed for when the saved
image was built, and N is the minimum margin that would have
actually been needed for the saved image to restore
successfully. (The margin can be specified via the logical name
"pop_shrim_margin" -- see REF * SYSTEM.)
For further information on saving and restoring images, see the
following HELP files: * SYSSAVE * SYSRESTORE * SYSSAVEINCR
* SYSRESTOREINCR. Also see REF * SYSTEM
enp [error_code]
executing non-procedure
This error message can result from mistyping a procedure name,
calling a procedure before you've defined it, or using the same
identifier for the name of a procedure and for some other
purpose.
ica [error_code]
incorrect item after <prefix_op>
An incorrect type occurs after prefix_op. For example, in a
list, the symbol ^ can only be followed by a word, and not, for
example a number or string (See HELP * ARROW).
Another example of this error can be got from the nonop operator
(see HELP * NONOP). If you wish to use an infix operation, e.g.
+ or > as an identifier referring to the procedure, then you
have to prefix it with nonop. If the wrong sort of identifier
follows nonop, you'll get this error (i.e. what follows nonop
must have been declared as an operator).
ine [error_code]
identifier name expected [after <prefix_op>]
A special case of ica where the item expected is an identifier
name, e.g. in an identifier declaration statement, or following
ident, etc.
ids [error_code]
incorrect define syntax
You've probably left out one of the parentheses, e.g.
define silly(x,y;
or used a semi-colon instead of a comma, e.g.
define silly(x;y);
or inadvertently used a syntax word as one of the input or
output variables in a procedure definition, e.g.
define silly(x, until);
define silly(x, y) -> until;
in which case the error message will, somewhat misleadingly say
"(nothing after -> or =>)" or left the semi-colon off the end of
the procedure heading so that Pop-11 thinks that the following
items are being declared as variables, e.g.
define silly(list)
vars x
Pop-11 thinks vars is being used as one of the variables in the
procedure heading and complains. See also REF * IPS and
REF * IDW
idw [error_code]
illegal declaration of word
This can be due to several different mistakes:
(1) You've tried to declare and use as a variable a word
which already is a 'protected' Pop-11 system word. E.g.
try
vars length;
(2) You've left the semi-colon off the end of a vars
statement, so that Pop-11 thinks the next item is also
part of the declaration, e.g. type in:
vars x
[a list of words] -> x
(3) Like (1) except that you've used the variable as one of
the formal parameters (input variables) or output locals
of a procedure heading. E.g. try:
define silly(in) -> out;
in is a 'syntax' word, used in the 'loop' construct:
for variable in list do ... endfor,
so using in, (or for, or do, or endfor) as a variable
will cause an error.
Alternatively, you may have put square brackets round the formal
parameter, because you expect the argument to be a list, e.g.
define silly([list]);
Pop-11 thinks you are trying to use `[` and `]` as variable
names. (You provide the square brackets when you RUN the
procedure, not when you define it).
Or you may have tried to define a procedure with a name which is
already a Pop-11 word, e.g.
define front(list);
See also REF * IDS -- 'Incorrect define syntax'.
iue [error_code]
impermissible update expression (e.g. after -> or ->>)
This error message will occur if you follow either kind of
assignment arrow with an expression which is not permissible in
that context, i.e. that does not have an interpretation in
'update' mode. Examples:
99 -> 100;
3 -> [X];
X -> Y and Z;
ips [error_code]
incorrect procedure syntax
You've probably left out one of the parentheses, e.g.
procedure (x,y;
or used a semi-colon instead of a comma,
procedure (x;y);
or left the semi-colon off the end of the procedure heading so
that Pop-11 thinks that the following items are being declared
as variables, e.g.
procedure (list)
vars x
Pop-11 thinks VARS is being used as one of the variables in the
procedure heading and complains. See also HELP * IDS and
HELP * IDW
iqw [error_code]
incorrect quoted word
You'll get an error message if the word-quote symbol (") is
followed by something that cannot be a word (see HELP * WORDS).
For instance, the following is an illegal expressions:
vars ninenine = "99";
mcb [error_code]
missing closing bracket
You will get this error message when a closing bracket of the
correct type cannot be found. This could be caused by you
missing the bracket completely, eg:
[a list without a closing bracket -> foo;
or or by using the wrong type, eg:
{a vector with the wrong closing bracket] -> foo;
mei [error_code]
misplaced expression item
This mishap occurs when an incorrect expression is found when
compiling a Pop-11 program. One way this often occurs is by
missing out a closing 'bracket' in an expression. For example
repeat 5 times;
/* blah... blah... blah... *
endrepost; ;;; typo in the "endrepeat"
msep [error_code]
missing separator
This can happen for a variety of reasons. The most common is
that you've forgotten to terminate a command with a semicolon.
E.g:
vars list;
[a list of words] -> list
list =>
The second line should have a semi-colon after "list".
Because Pop-11 treats line breaks as equivalent to spaces, so
that you can type long commands going over several lines, it
doesn't realise that the command on the second line was
complete. So it continues trying to read a command, and finds
that the word 'list' occurs twice with nothing in between, which
is not permitted.
Another way to get this mishap is to type square brackets
instead of round ones after a procedure name, e.g.
replyto [I like you];
instead of
replyto( [I like you]);
See HELP * SEMICOLON, * PRINTARROW
msw [error_code]
misplaced syntax word
This sort of mishap can occur when you have a 'closing bracket'
missing, or perhaps a surplus closing bracket (See
TEACH * BRACKETS). For example, the following will produce a MSW
mishap:
repeat;
/* do something *
endwhile; ;;; wrong closing bracket
ndb [error_code]
no define before line <number>
This error message is produced by the VED ENTER mcp (Mark
current procedure) routine i.e. ved_mcp , or its derivatives
(ved_jcp - Justify current procedure, ved_lcp - load current
procedure).
ved_mcp searches backwards from the current line looking for a
line starting with define. To do this it uses ved_mbp (Mark
beginning of procedure). If it doesn't find such a line, the
error message is produced. For more information about marking
ranges in ved see HELP * MARK
pvn [error_code]
procedure or vector needed in vedfiletype
This mishap is caused by giving an item that is neither a vector
nor a procedure as the action part of an entry in the list
vedfiletypes or in the list given to the procedure
vedsetfiletypes. See HELP * VEDFILETYPES
rle [error_code]
recursion level exceeded
If you call a procedure which calls itself, then there is a
danger that the calls will go on indefinitely. You'll then get
'recursion level exceeded'. The way to stop this is for the
procedure to check whether some stopping condition has been
reached, and if so, not call itself again.
For example here is a procedure which adds up all the
numbers up to the given NUM.
define addup(num) -> total;
if num = 0 then
0 -> total
else
addup(num - 1) -> total;
total + num -> total
endif
enddefine;
If you trace that procedure and give it 5 as input, you'll see
how it calls itself with num getting smaller and smaller. It
stops when the number = 0.
trace addup;
addup(5) =>
However, if you give it a decimal number, then the number is
never = 0, so the recursive calling can go on and on, and you'll
have to interrupt with CTRL-C. Try it.
addup(5.3) =>
If you UNTRACE ADDUP; and do it again, then there won't be any
print out, but after a while the recursion level will be
exceeded. You'll get a long error message which you can
interrupt with CTRL-C. See HELP * POP_CALLSTACK_LIM on
controlling the maximum depth of recursion
rom [error_code]
soft/hard memory allocation exceeded
This mishap divides up into two basic types:
ROM: MEMORY LIMIT (popmemlim) EXCEEDED (<DOING>)
This error means that the 'advisory' limit given by the
variable popmemlim has been exceeded (the purpose of
this limit being simply to prevent runaway expansion of
memory by a buggy program, or to contain memory
expansion so that garbage collections don't take too
long). Its default is 100000 words, but you can set it
as high as you want.
ROM: NO MORE MEMORY AVAILABLE (<DOING>)
This second error is more serious, and means that you
have actually exhausted all the memory the operating
system is willing (or able) to give to your Poplog
process.
The DOING part of the mishap tells you when the error occurred.
For example if DOING mentioned the heap space, then the memory
limit was probably exceeded when space was being allocated for a
structure. See HELP * POPMEMLIM, REF * SYSTEM for more details.
rvl [error_code]
recursive_valof looping
Recursive_valof applies * valof to X while X is a word, and
returns the result. The * mishap can be caused by applying it to
a variable whose value is a word with the same name, e.g.:
vars d = "d";
recursive_valof(d) =>
Also see HELP * valof
spn [error_code]
string or procedure needed in vedfiletypes
This mishap is produced by vedsetfiletypes if it finds something
other than a string or procedure as a "bottom level" file type
specification, when interpreting the condition of an entry in
the vedfiletypes list. See HELP * vedfiletypes
ste [error_code]
stack empty (missing argument? missing result?)
Procedures get their inputs (arguments) via a portion of the
computer memory called the stack. They also leave their results
there. If a procedure is not provided with enough inputs it
takes what it can, then complains stack empty. E.g. try
matches [a list] =>
Matches needs two inputs, and here it has only one, so you get a
mishap.
Also if a procedure should have produced a result because it
was to be used in another procedure, then a mishap will occur if
the result is not found on the stack. E.g. you can have a string
of IF THEN ELSEIF THEN... conditions and if there is no ELSE
case, then if none of the conditions is true, no result is
produced.
Aside from this, a 'stack empty' mishap will arise if a SEGV
(Segmentation Violation) signal occurs. This may account for
certain 'stack empty' mishaps during the execution of incorrect
externally loaded routines. See TEACH * STACK for an
introduction to the stack.
sts [error_code]
structure too short
This mishap message occurs when an attempt is made to specify a
portion of a structure which is larger than the structure
itself. Typically, asking for the first N elements of a
structure which has length less than N will cause this mishap.
For example
allbutfirst(5, 'four') =>
The string 'four' is a structure of only 4 elements
(characters), so attempting to specify more than 4 elements will
cause a mishap.
See HELP * allbutfirst and * allbutlast which describe
procedures that can produce this error. Also see HELP * length
on finding the number of elements in a structure.
uts [error_code]
unterminated string
This mishap is due to the use of the "string quote" character,
('). Often it is a result of trying to put an apostrophe into a
word, as in
[I DON'T KNOW] =>
See HELP * APOSTROPHE for more information on this.
vffn [error_code]
ved file or name needed
Several ved procedures (e.g. * vededitor, * vedpresent) expect
an argument which is either a ved file name (i.e. a string) or a
ved file structure. If any other item is given this mishap
message results.
vfn [error_code]
ved file needed
This mishap is caused by giving an incorrect item as argument to
a procedure that expects a ved file structure.
vln [error_code]
vector of length 2 or 3 needed in ved specification
This mishap is produced if an incorrect 'action' specification
is found in the list vedfiletypes or in a similar list given to
the procedure vedsetfiletypes. See HELP * VEDFILETYPES
wft [error_code]
wrong file type in vedfiletypes
This mishap occurs when an incorrect file type specification
(i.e. a condition that is not a string, list or procedure) is
included in the list vedfiletypes, or in a list given to the
procedure vedsetfiletypes. See HELP * VEDFILETYPES
------------------------
2 X Windows error codes
------------------------
Programs using the Poplog/X interface may generate the following error
codes:
xte [error_code]
x toolkit error
This mishap will be generated by a call to XtErrorMsg or
XtError, and indicates that a non-recoverable error has occured
inside the x Toolkit. For errors generated using XtErrorMsg, the
name and type of the error message is also reported. Poplog's
default response to this error is to generate a mishap.
After such errors, the toolkit is left in an undetermined state,
and future interactions with the x Toolkit may have
unpredictable results.
xtw [error_code]
x toolkit warning
This error code is used when one of the x Toolkit error handlers
XtWarning or XtWarningMsg is called. Poplog prints out the
warning message but does not interrupt the program that
generated it. Such errors often occur when you specify an
invalid value for a resource, or try for example to call a
callback list that doesn't exist.
xioe [error_code]
xlib io error
This mishap arises when a fatal io error involving a connection
to an X Server has occured. This can happen when the connection
between the client and the X Server is terminated using
XKillClient (eg. by the X program xkill or by the window
manager). Poplog's response to this is to destroy any X Toolkit
application context related to the display, and then to mishap.
xpe [error_code]
x protocol error
This mishap code is used when an x operation has failed, and the
x server has notified Poplog of an error. Such errors usually
occur when an invalid or null resource ID or XID is passed to an
Xlib procedure. The operation is aborted, and information about
the request number, the resource ID invovled, etc. is printed
out. Although the operation is not completed, the currently
running program is not interrupted.
-------------------------------
3 System dependent error codes
-------------------------------
serr [error_code]
system errors
There are two types of mishaps caused by system errors:
SERR: SYSTEM ERROR
This is the general mishap for any system error that Poplog
cannot handle, for example an illegal instruction. This
error should only happen in usual circumstances (using
non-checking procedures for example).
On Unix systems the mishap will appear under a message
something like this:
<<<<<<< System Error: Signal = 4, PC = 000A4712 >>>>>>>
which gives the Unix signal number of the error, and the
value of the program counter at the time. For more details
of the use of Unix signals in Pop see REF * ASYNC and the
Unix manual entries signal(3v) and sigvec(2).
SERR: MEMORY ACCESS VIOLATION
This mishap is a result of trying to change part of the
Poplog system which you're not allowed to. You may be able
to get around the error by making a copy of the item before
altering it (see HELP * COPY).
On Unix systems this mishap will usually be caused by signal
11 (segmentation violation) and will appear under a message
something like this:
<<< Access Violation: PC = 4712, Addr = 0000, Code = 0 >>>
giving various pieces of information about the state of the
machine at the time of the error (probably of no use to the
average user).
+-+ C.all/ref/mishap_codes
+-+ Copyright University of Sussex 1991. All rights reserved.