home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
549a.lha
/
M2P_v1.0
/
mods.lzh
/
DBug.mod
< prev
next >
Wrap
Text File
|
1991-08-10
|
4KB
|
311 lines
IMPLEMENTATION MODULE DBug;
IMPORT
SYSTEM;
IMPORT
Tasks;
(*----------------------------------------------------------------------*)
CONST
HaltNumber = 0;
TYPE
Message = ARRAY [0..40] OF CHAR;
VAR
errorNo : INTEGER; (* Error number *)
errorText : POINTER TO Message;
task : Tasks.TaskPtr;
oldTrapCode : PROC;
(*----------------------------------------------------------------------*)
(* To avoid importing Intuition, we simply define AutoRequest here *)
(*----------------------------------------------------------------------*)
(* movem.l d1-d3/a0-a6,-(sp) *)
(* movem.l 44(sp),d0-d3/a0-a3 *)
(* exg d0,d3 *)
(* exg d1,d2 *)
(* exg a0,a3 *)
(* exg a1,a2 *)
(* jsr -348(a6) *)
(* move.b d0,76(sp) *)
(* movem.l (sp)+,d1-d3/a0-a6 *)
(* rts *)
(*----------------------------------------------------------------------*)
(* Put up a requester asking what to do about the problem. *)
(*----------------------------------------------------------------------*)
PROCEDURE AskCont(): BOOLEAN;
TYPE
IntuiText = RECORD
FrontPen : SYSTEM.BYTE;
BackPen : SYSTEM.BYTE;
DrawMode : SYSTEM.BYTE;
LeftEdge : INTEGER;
TopEdge : INTEGER;
ITextFont: SYSTEM.ADDRESS;
IText : SYSTEM.ADDRESS;
NextText : SYSTEM.ADDRESS;
END;
VAR
it1,it2,ptext,ntext: IntuiText;
mess1,cont,abort : Message;
BEGIN
mess1:='Modula-2 Runtime Error';
cont :=' Cont ';
abort:=' Abort ';
WITH it1 DO
FrontPen := SYSTEM.BYTE(0);
DrawMode := SYSTEM.BYTE(0);
LeftEdge := 18;
TopEdge := 8;
ITextFont := SYSTEM.ADDRESS(0);
IText := SYSTEM.ADR(mess1);
NextText := SYSTEM.ADR(it2);
END;
WITH it2 DO
FrontPen := SYSTEM.BYTE(0);
DrawMode := SYSTEM.BYTE(0);
LeftEdge := 18;
TopEdge := 18;
ITextFont := SYSTEM.ADDRESS(0);
IText := errorText;
NextText := SYSTEM.ADDRESS(0);
END;
WITH ntext DO
FrontPen := SYSTEM.BYTE(0);
DrawMode := SYSTEM.BYTE(0);
LeftEdge := 6;
TopEdge := 3;
ITextFont := SYSTEM.ADDRESS(0);
IText := SYSTEM.ADR(abort);
NextText := SYSTEM.ADDRESS(0);
END;
WITH ptext DO
FrontPen := SYSTEM.BYTE(0);
DrawMode := SYSTEM.BYTE(0);
LeftEdge := 6;
TopEdge := 3;
ITextFont := SYSTEM.ADDRESS(0);
IText := SYSTEM.ADR(cont);
NextText := SYSTEM.ADDRESS(0);
END;
RETURN AutoRequest(SYSTEM.ADDRESS(0),SYSTEM.ADR(it1),SYSTEM.ADR(ptext), SYSTEM.ADR(ntext),LONGBITSET(0),LONGBITSET(0),
320,72);
END AskCont;
(*----------------------------------------------------------------------*)
(* Set the error message based on the compiler and the errorNo. *)
(* If it is a halt, then halt without asking, otherwise ask if user *)
(* wants to continue. *)
(*----------------------------------------------------------------------*)
PROCEDURE ProcessError;
VAR
mess: Message;
BEGIN
errorNo:=HaltNumber;
mess[0]:=0C;
errorText:=SYSTEM.ADR(mess);
IF (errorNo=HaltNumber) OR NOT AskCont() THEN
TermProc;
HALT;
END;
(* restore partial context *)
(* of error and attempt to *)
(* resume again *)
END ProcessError;
(*-------------------------------------------------------------------*)
PROCEDURE Nothing;
BEGIN
END Nothing;
(*-------------------------------------------------------------------*)
(* Trap handlers to set up M2Sprint error catcher *)
(*-------------------------------------------------------------------*)
(* move.l pc,4(a7) *)
(* Just used to put a long word on the stack *)
(* move.l (a7)+,d0 trap number *)
(* move.l 2(a7),d0 pc *)
(* move.l a3,2(a7) *)
(* RTE *)
(*********************************************************************)
BEGIN
TermProc:=Nothing;
END DBug.