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 >
Text File  |  1991-08-10  |  4KB  |  311 lines

  1. IMPLEMENTATION MODULE DBug;
  2.  
  3.  
  4.  
  5.  
  6.  
  7. IMPORT
  8.     SYSTEM;
  9. IMPORT
  10.     Tasks;
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  (*----------------------------------------------------------------------*)
  20.  
  21.  
  22.  
  23. CONST
  24.     HaltNumber = 0;
  25.  
  26.  
  27. TYPE
  28.     Message = ARRAY [0..40] OF CHAR;
  29.  
  30. VAR
  31.     errorNo : INTEGER;              (* Error number *)
  32.     errorText : POINTER TO Message;
  33.  
  34.     task : Tasks.TaskPtr;
  35.     oldTrapCode : PROC;
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  (*----------------------------------------------------------------------*)
  42.  (* To avoid importing Intuition, we simply define AutoRequest here      *)
  43.  (*----------------------------------------------------------------------*)
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62. (* movem.l d1-d3/a0-a6,-(sp)    *)
  63.  
  64. (* movem.l 44(sp),d0-d3/a0-a3   *)
  65. (*  exg     d0,d3               *)
  66. (*  exg     d1,d2               *)
  67. (*  exg     a0,a3               *)
  68. (*  exg     a1,a2               *)
  69. (* jsr     -348(a6)             *)
  70. (* move.b   d0,76(sp)           *)
  71. (* movem.l (sp)+,d1-d3/a0-a6    *)
  72. (* rts                          *)
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  (*----------------------------------------------------------------------*)
  80.  (* Put up a requester asking what to do about the problem.              *)
  81.  (*----------------------------------------------------------------------*)
  82.  
  83.  
  84.  
  85. PROCEDURE AskCont(): BOOLEAN;
  86.  
  87. TYPE
  88.     IntuiText = RECORD
  89.         FrontPen : SYSTEM.BYTE;
  90.         BackPen : SYSTEM.BYTE;
  91.         DrawMode : SYSTEM.BYTE;
  92.         LeftEdge : INTEGER;
  93.         TopEdge : INTEGER;
  94.         ITextFont: SYSTEM.ADDRESS;
  95.         IText : SYSTEM.ADDRESS;
  96.         NextText : SYSTEM.ADDRESS;
  97.     END;
  98.  
  99. VAR
  100.     it1,it2,ptext,ntext: IntuiText;
  101.     mess1,cont,abort : Message;
  102.  
  103. BEGIN
  104.     mess1:='Modula-2 Runtime Error';
  105.     cont :=' Cont ';
  106.     abort:=' Abort ';
  107.     WITH it1 DO
  108.         FrontPen := SYSTEM.BYTE(0);
  109.         DrawMode := SYSTEM.BYTE(0);
  110.         LeftEdge := 18;
  111.         TopEdge := 8;
  112.         ITextFont := SYSTEM.ADDRESS(0);
  113.         IText := SYSTEM.ADR(mess1);
  114.         NextText := SYSTEM.ADR(it2);
  115.     END;
  116.  
  117.     WITH it2 DO
  118.         FrontPen := SYSTEM.BYTE(0);
  119.         DrawMode := SYSTEM.BYTE(0);
  120.         LeftEdge := 18;
  121.         TopEdge := 18;
  122.         ITextFont := SYSTEM.ADDRESS(0);
  123.         IText := errorText;
  124.         NextText := SYSTEM.ADDRESS(0);
  125.     END;
  126.  
  127.     WITH ntext DO
  128.         FrontPen := SYSTEM.BYTE(0);
  129.         DrawMode := SYSTEM.BYTE(0);
  130.         LeftEdge := 6;
  131.         TopEdge := 3;
  132.         ITextFont := SYSTEM.ADDRESS(0);
  133.         IText := SYSTEM.ADR(abort);
  134.         NextText := SYSTEM.ADDRESS(0);
  135.     END;
  136.  
  137.     WITH ptext DO
  138.         FrontPen := SYSTEM.BYTE(0);
  139.         DrawMode := SYSTEM.BYTE(0);
  140.         LeftEdge := 6;
  141.         TopEdge := 3;
  142.         ITextFont := SYSTEM.ADDRESS(0);
  143.         IText := SYSTEM.ADR(cont);
  144.         NextText := SYSTEM.ADDRESS(0);
  145.     END;
  146.  
  147.     RETURN AutoRequest(SYSTEM.ADDRESS(0),SYSTEM.ADR(it1),SYSTEM.ADR(ptext), SYSTEM.ADR(ntext),LONGBITSET(0),LONGBITSET(0),
  148.     320,72);
  149. END AskCont;
  150.  
  151.  (*----------------------------------------------------------------------*)
  152.  (* Set the error message based on the compiler and the errorNo.         *)
  153.  (* If it is a halt, then halt without asking, otherwise ask if user     *)
  154.  (* wants to continue.                                                   *)
  155.  (*----------------------------------------------------------------------*)
  156.  
  157. PROCEDURE ProcessError;
  158.  
  159. VAR
  160.     mess: Message;
  161.  
  162. BEGIN
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.     errorNo:=HaltNumber;
  210.     mess[0]:=0C;
  211.     errorText:=SYSTEM.ADR(mess);
  212.  
  213.  
  214.     IF (errorNo=HaltNumber) OR NOT AskCont() THEN
  215.         TermProc;
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.         HALT;
  224.     END;
  225.  
  226.  
  227.  
  228. (* restore partial context *)
  229. (* of error and attempt to *)
  230. (* resume again            *)
  231.  
  232.  
  233. END ProcessError;
  234.  
  235.  (*-------------------------------------------------------------------*)
  236.  
  237. PROCEDURE Nothing;
  238. BEGIN
  239. END Nothing;
  240.  
  241.  (*-------------------------------------------------------------------*)
  242.  (* Trap handlers to set up M2Sprint error catcher                    *)
  243.  (*-------------------------------------------------------------------*)
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258. (* move.l pc,4(a7) *)
  259.  
  260.  
  261.  
  262.  
  263.  
  264. (* Just used to put a long word on the stack *)
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274. (* move.l (a7)+,d0   trap number *)
  275.  
  276.  
  277. (* move.l 2(a7),d0   pc *)
  278.  
  279. (* move.l a3,2(a7) *)
  280. (* RTE *)
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  (*********************************************************************)
  288.  
  289.  
  290.  
  291. BEGIN
  292.     TermProc:=Nothing;
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310. END DBug.
  311.