home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / t_power / stakdump.pas < prev    next >
Pascal/Delphi Source File  |  1987-11-27  |  1KB  |  50 lines

  1. {$R-,S-,I-}
  2.  
  3. unit StakDump;
  4.   {-Exit handler with stack dump for Turbo 4}
  5.  
  6. interface
  7.  
  8.   {==========================================================================}
  9.  
  10. implementation
  11.  
  12. var
  13.   ExitSave : Pointer;
  14.   InitSP : Word;
  15.  
  16.   {$L STAKDUMP}        {Good stuff's in here}
  17.   procedure Trace;
  18.     {-Dump stack of return addresses}
  19.   external;
  20.  
  21.   {$F+}
  22.   procedure ErrorProc;
  23.     {-Gains control when errors occur}
  24.   begin
  25.     {Restore previous handler}
  26.     ExitProc := ExitSave;
  27.     if (ErrorAddr <> nil) and (Mem[PrefixSeg:5] <> $C3) then begin
  28.       {Error not previously handled, and not in user-interface Turbo}
  29.       {Reset standard output}
  30.       if IoResult = 0 then ;
  31.       Assign(Output, '');
  32.       Rewrite(Output);
  33.       {Write runtime error}
  34.       WriteLn('Runtime error ', ExitCode, '. Stack dump:');
  35.       {Trace from error address to top of stack}
  36.       Trace;
  37.       {Stop remaining handlers from reporting error}
  38.       ErrorAddr := nil;
  39.     end;
  40.   end;
  41.   {$F-}
  42.  
  43. begin
  44.   {Save initial stack pointer}
  45.   InitSP := SPtr+4;
  46.   {Set up ExitProc}
  47.   ExitSave := ExitProc;
  48.   ExitProc := @ErrorProc;
  49. end.
  50.