home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1991-08-10 | 3.9 KB | 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.
-