грамма, объявленная в интерфейсной части модуля, автоматически транслируется в расчете на дальнюю модель памяти.
В процедуре UserExit используется глобальная переменная OldExit. В нее программа пользователя должна поместить первоначальное значение переменной ExitProc, чтобы осуществились все необходимые стандартные действия, связанные с завершением работы программы. Для вывода адреса ошибочного оператора содержимое переменной ErrorAddr преобразуется в 16—ричный формат с помощью функции HexW. Такое преобразование может использоваться в программе пользователя и для других целей, поэтому функция HexW и вспомогательная функция НехВ также объявлены в интерфейсной части модуля.
Использование процедуры UserExit проиллюстрируем следующей
простой программой:
^———————————————————————————+
¦ Пример использования процедуры UserExit \
¦ для контроля работы программы \ -,-._——_——_—————.—,—————————————+_
Pses UsrExit;
var
x,y,z: real;
begin
OldExit := ExitProc; {Сохраняем старое значение ExitProc} ExitProc := @UserExit; {Указываем адрес процедуры UserExit} repeat
Write('X,Y= '); {Просим ввести операнды}
ReadLn(x,y); (Вводим операнды}
z := х/у; {Вычисляем их отношение}
WriteLn(z:15:7) {Выводим результат} until z=0;
ExitProc := OldExit {Готовим стандартное завершение} end.
В этой программе вводятся два произвольных вещественных числа и находится частное от деления первого на второе. Программа повторяет эти действия до тех пор, пока частное не станет равным нулю, или пока не возникнет исключительная ситуация. Последнее возможно в операторе
ReadLn(x,y),
если будет нарушен требуемый формат задания вещественных чисел (например, в записи числа будет указан недопустимый символ), или в операторе
z := х/у,
если делитель равен нулю.
Если Вы решите использовать подобную процедуру в Вашей программе, не забудьте восстановить стандартное значение NIL в переменной ExitProc перед завершением ее работы, в противном случае возможно «зависание» программы со всеми вытекающими отсюда последствиями.