home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 12 / error.inc < prev    next >
Encoding:
Text File  |  1987-09-28  |  2.1 KB  |  77 lines

  1. (* ----------------------------------------------------- *)
  2. (*                       ERROR.INC                       *)
  3. (*  faengt Laufzeitfehler in Turbo 3.0 unter CP/M 80 ab  *)
  4.  
  5. CONST  Error        : BOOLEAN = FALSE;
  6. VAR    SaveErrorPtr : INTEGER;
  7. (* ----------------------------------------------------- *)
  8. PROCEDURE Errorhandler (ErrNr, ErrAddr : INTEGER);
  9.  
  10. TYPE Str15      = STRING[15];
  11. VAR  RelErrAddr : INTEGER ABSOLUTE $ce;
  12.  
  13.   PROCEDURE WriteHexInt (I : INTEGER);
  14.   BEGIN
  15.     Write('$');
  16.     INLINE ($2a/I/             (* Ld Hl,(Addr(I)) *)
  17.             $cd/$4af);         (* Call 4af *)
  18.   END;
  19.  
  20.   PROCEDURE WriteHexByte (I : BYTE);
  21.   BEGIN
  22.     Write('$');
  23.     INLINE ($3a/I/             (* Ld A,(Addr(I)) *)
  24.             $cd/$4b4);         (* Call 4b4 *)
  25.   END;
  26.  
  27.   PROCEDURE Error_Message (I : BYTE; J : INTEGER);
  28.   BEGIN                      (* dient nur zu Demozwecken *)
  29.     Write('Laufzeitfehler ');
  30.     WriteHexByte(I);
  31.     Write(' bei PC = ');
  32.     WriteHexInt(J);
  33.     WriteLn;
  34.   END;
  35.  
  36.   PROCEDURE Leave_Program (Message : Str15);
  37.   BEGIN
  38.     WriteLn;
  39.     Write(Message + ' bei PC = ');
  40.     WriteHexInt(ErrAddr);
  41.     WriteLn;
  42.     Halt; (* ohne diesen Befehl werden auch User - Break *)
  43.           (* und I/O - Error ignoriert ! *)
  44.   END;
  45.  
  46. BEGIN
  47.   INLINE($fd/$e1/        (* Pop  iy *)
  48.          $fd/$e1/        (* Pop  iy *)
  49.          $dd/$e5);       (* Push ix *)
  50.   Error := TRUE;
  51.   RelErrAddr := 0;
  52.   CASE Hi(ErrNr) OF
  53.     0 : Leave_Program('User - Break');
  54.     1 : Leave_Program('I/O - Fehler');
  55.   END;
  56.   IF Lo(ErrNr) = $ff THEN BEGIN
  57.     WriteLn;  WriteLn;
  58.     WriteLn('fataler Laufzeit - Fehler!');
  59.     Delay(2000);
  60.     INLINE($c3/$100) (* Jp 100h  ;Neustart des Programms *)
  61.   END;
  62.   Error_Message(Lo(ErrNr),ErrAddr);      (* nur als Demo *)
  63. END;
  64. (* ----------------------------------------------------- *)
  65. PROCEDURE InitErrorCheck;
  66. BEGIN
  67.   SaveErrorPtr := ErrorPtr;
  68.   ErrorPtr := Addr(Errorhandler);
  69. END;
  70.  
  71. PROCEDURE OldErrorCheck;
  72. BEGIN
  73.   ErrorPtr := SaveErrorPtr;
  74. END;
  75. (* ----------------------------------------------------- *)
  76. (*                       ERROR.INC                       *)
  77.