erroru.pp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. unit erroru;
  2. interface
  3. procedure error;
  4. procedure accept_error(num : longint);
  5. procedure require_error(num : longint);
  6. implementation
  7. const program_has_error : boolean = false;
  8. procedure error;
  9. begin
  10. Writeln('Error in ',paramstr(0));
  11. program_has_error:=true;
  12. end;
  13. const
  14. store_exitproc : pointer = nil;
  15. accepted_error_num : longint = 0;
  16. required_error_num : longint = 0;
  17. procedure accept_error(num : longint);
  18. begin
  19. accepted_error_num:=num;
  20. end;
  21. procedure require_error(num : longint);
  22. begin
  23. required_error_num:=num;
  24. accepted_error_num:=num;
  25. end;
  26. procedure error_unit_exit;
  27. begin
  28. exitproc:=store_exitproc;
  29. if exitcode<>0 then
  30. begin
  31. if (required_error_num<>0) and (exitcode<>required_error_num) then
  32. begin
  33. Write('Program ',paramstr(0));
  34. Write(' exited with error ',exitcode,' whereas error ');
  35. Writeln(required_error_num,' was expected');
  36. Halt(1);
  37. end
  38. else if exitcode<>accepted_error_num then
  39. begin
  40. Write('Program ',paramstr(0));
  41. Write(' exited with error ',exitcode,' whereas only error ');
  42. Writeln(accepted_error_num,' was expected');
  43. Halt(1);
  44. end;
  45. end
  46. else if required_error_num<>0 then
  47. begin
  48. Write('Program ',paramstr(0));
  49. Write(' exited without error whereas error ');
  50. Writeln(required_error_num,' was expected');
  51. Halt(1);
  52. end;
  53. if program_has_error then
  54. Halt(1)
  55. else
  56. begin
  57. exitcode:=0;
  58. erroraddr:=nil;
  59. end;
  60. end;
  61. begin
  62. store_exitproc:=exitproc;
  63. exitproc:=@error_unit_exit;
  64. end.