DEFINITION MODULE Traps;
(*
  Module:	Facility for handling traps
  Author:	Ceriel J.H. Jacobs
  Version:	$Header$
*)

  IMPORT EM;

  CONST
	ERRTOOLARGE =	64;	(* stack size of process too large *)
	ERRTOOMANY =	65;	(* too many nested traps + handlers *)
	ERRNORESULT =	66;	(* no RETURN from function procedure *)
	ERRCARDOVFL =	67;	(* CARDINAL overflow *)
	ERRFORLOOP =	68;	(* value of FOR-loop control variable changed
				   in loop
				*)
	ERRCARDUVFL =	69;	(* CARDINAL underflow *)
	ERRINTERNAL =	70;	(* Internal error; should not happen *)
	ERRUNIXSIG =	71;	(* received unix signal *)

  TYPE	TrapHandler = EM.TrapHandler;

  PROCEDURE InstallTrapHandler(t: TrapHandler): TrapHandler;
  (* Install a new trap handler, and return the previous one.
     Parameter of trap handler is the trap number.
     When a trap occurs, the default trap handler is re-installed before
     calling the new handler.
  *)

  PROCEDURE Message(str: ARRAY OF CHAR);
  (* Write message "str" on standard error, preceeded by filename and
     linenumber if possible
  *)

  PROCEDURE Trap(n: INTEGER);
  (* cause trap number "n" to occur *)

END Traps.