home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* ERROR.INC *)
- (* faengt Laufzeitfehler in Turbo 3.0 unter CP/M 80 ab *)
-
- CONST Error : BOOLEAN = FALSE;
- VAR SaveErrorPtr : INTEGER;
- (* ----------------------------------------------------- *)
- PROCEDURE Errorhandler (ErrNr, ErrAddr : INTEGER);
-
- TYPE Str15 = STRING[15];
- VAR RelErrAddr : INTEGER ABSOLUTE $ce;
-
- PROCEDURE WriteHexInt (I : INTEGER);
- BEGIN
- Write('$');
- INLINE ($2a/I/ (* Ld Hl,(Addr(I)) *)
- $cd/$4af); (* Call 4af *)
- END;
-
- PROCEDURE WriteHexByte (I : BYTE);
- BEGIN
- Write('$');
- INLINE ($3a/I/ (* Ld A,(Addr(I)) *)
- $cd/$4b4); (* Call 4b4 *)
- END;
-
- PROCEDURE Error_Message (I : BYTE; J : INTEGER);
- BEGIN (* dient nur zu Demozwecken *)
- Write('Laufzeitfehler ');
- WriteHexByte(I);
- Write(' bei PC = ');
- WriteHexInt(J);
- WriteLn;
- END;
-
- PROCEDURE Leave_Program (Message : Str15);
- BEGIN
- WriteLn;
- Write(Message + ' bei PC = ');
- WriteHexInt(ErrAddr);
- WriteLn;
- Halt; (* ohne diesen Befehl werden auch User - Break *)
- (* und I/O - Error ignoriert ! *)
- END;
-
- BEGIN
- INLINE($fd/$e1/ (* Pop iy *)
- $fd/$e1/ (* Pop iy *)
- $dd/$e5); (* Push ix *)
- Error := TRUE;
- RelErrAddr := 0;
- CASE Hi(ErrNr) OF
- 0 : Leave_Program('User - Break');
- 1 : Leave_Program('I/O - Fehler');
- END;
- IF Lo(ErrNr) = $ff THEN BEGIN
- WriteLn; WriteLn;
- WriteLn('fataler Laufzeit - Fehler!');
- Delay(2000);
- INLINE($c3/$100) (* Jp 100h ;Neustart des Programms *)
- END;
- Error_Message(Lo(ErrNr),ErrAddr); (* nur als Demo *)
- END;
- (* ----------------------------------------------------- *)
- PROCEDURE InitErrorCheck;
- BEGIN
- SaveErrorPtr := ErrorPtr;
- ErrorPtr := Addr(Errorhandler);
- END;
-
- PROCEDURE OldErrorCheck;
- BEGIN
- ErrorPtr := SaveErrorPtr;
- END;
- (* ----------------------------------------------------- *)
- (* ERROR.INC *)
-