erroru.pp 1.7 KB

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