Search Top Index
HELP MISHAP Steven Hardy, March 1982 Adrian Howard, August 1990 Aaron Sloman Oct 1990 mishap(<string>, <list-of-culprits>); General error handler vederror(<string>) Error handler for relatively simple VED errors CONTENTS - (Use <ENTER> g to access required sections) -- Introduction -- vederror(<string>) -- The procedure mishap -- mishap(<args>, <integer>, <string>) -- mishap(<string>, <list of args>) -- What -mishap- does -- Redefining prmishap -- Using pop_default_prmishap to prevent prmishap being overridden -- Safety measures in -mishap- -- POPSYSCALL and the calling chain -- Error code abbreviations -- Further reading -- Introduction ------------------------------------------------------- One of these procedures is called by the system whenever some error condition is detected. The user can, except in certain limited situations, alter the behaviour of default error handlers. -- vederror(<string>) ------------------------------------------------- This procedure handles simple editing errors for which -mishap- would be overkill, such as search string not found. It is definable by users, and has a default defined thus define vars vederror(string); lvars string; if vedediting and iscaller(vedprocess) then vedputmessage(string); vedscreenbell(); vedinterrupt(); else mishap(0,string) endif enddefine; -- The procedure mishap ---------------------------------------------- This procedure is more complex. It has two forms of invocation -- mishap(<args>, <integer>, <string>) -- mishap(<string>, <list of args>) These are equivalent provided that the number of arguments in the list is the same as <integer>. In particular mishap(0, <string>) is equivalent to mishap(<string>, []) The <args> are used by -prmishap- (described below) to create the "INVOLVING" line in standard error message formats. -- What -mishap- does ------------------------------------------------- It first prints information about the error, using -prmishap- and then aborts current processing, using -interrupt-. More precisely it (a) calls *PRMISHAP to print a mishap message (see HELP *SYSPRMISHAP) (b) calls the procedure held in the variable *INTERRUPT (which defaults to SETPOP, but is user-definable, and in VED is given the value -veddointerrupt- so that interrupting does not terminate VED) and finally (c) calls *SETPOP, in case something has gone wrong with the call of INTERRUP. Normally the call of SETPOP never occurs because INTERRUPT has aborted the call of MISHAP. -- Redefining prmishap ------------------------------------------------ -prmishap- is user definable, and should be assumed to be given arguments thus prmishap(<string>, <list of culprits>) The <string> will normally be the same as the string given to -mishap- and the <list of culprits> will be derived from the other arguments given to -mishap-. (See REF * MISHAPS) The default value of -prmishap- is normally -sysprmishap-, except inside VED, where it may be given the value -vedprmishap- (See below). Users can define -prmishap- to print information in a form that is found more convenient or appropriate. In particular, a user-defined -prmishap- can prevent the call of -interrupt- being effective, by itself using some other procedure to do an abnormal exit to a preferred context, e.g. using exittto, or chainto. See HELP * CONTROL/Abnormal -- Using pop_default_prmishap to prevent prmishap being overridden ---- Inside VED, -prmishap- is given different standard values depending on whether VED is currently obeying a "marked range" (see HELP * MARK/lmr), or is in "immediate mode" (as described in HELP *IM). These values will override a user-defined value of prmishap, unless the user assigns the required procedure to -pop_default_prmishap- (e.g. in vedinit.p, or init.p). E.g. in your init.p do define pop_default_prmishap(string, list); .... enddefine; pop_default_prmishap -> prmishap; -- Safety measures in -mishap- ---------------------------------------- User defined versions of -mishap- or -interrupt- can sometimes cause errors, and this will lead to infinite error loops. So if while invoking the user's -prmishap-, -mishap- is triggered again, it locally sets the value of -prmishap- to be -sysprmishap-. Similarly, -mishap- temporarily changes the values of other user-assignable variables, like -cucharout- and -interrupt- for safety reasons. In some situations the user's prmishap is not given a chance as there is too great a risk of store being corrupted or infinite error loops, e.g. when there is call stack overflow, or there is no more heap space available, etc. In that case -sysprmishap- is run directly. -- POPSYSCALL and the calling chain ----------------------------------- The default version of prmishap prints out the currently active procedures in a line starting with 'DOING:'. However, it does not print any procedure whose pdprops (normally holding the name of the procedure) is -false-, or starts with 'sys' or starts with 'ved'. This can be controlled by the variable -popsyscall-, whose default value is false. If it is made TRUE, then procedures whose names start with 'sys' or 'ved' will be included in the DOING list. If the value is anything else, e.g. "1", then additional information about nameless system procedures is printed out, but this will normally be useless to ordinary users. -- Error code abbreviations ------------------------------------------- Some mishap messages start with a string of letters representing a code for the error. e.g. *ENP *ICA *IEAA *MSEP etc. By using the REF command (in or out of VED), followed by the code, you can read an explanatory file, which may help to make the error message clearer. E.g. REF MSW -- Further reading ---------------------------------------------------- See also HELP *POPMISHAPS - variable holding a summary of error messages *PRMISHAP - Prints error messages; user-redefinable *INTERRUPT - On POP-11 interrupt procedures *SETPOP - Resets the POP-11 system *POPSYSCALL - controls inclusion in mishap messages of systems procedures REF * MISHAPS Detailed information about the error handler --- C.all/help/mishap -------------------------------------------------- --- Copyright University of Sussex 1990. All rights reserved. ----------