грамма, объявленная в интерфейсной части модуля, автоматически транслируется в расчете на дальнюю модель памяти.

В процедуре 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 перед завершением ее работы, в противном случае возможно «зависание» программы со всеми вытекающими отсюда последствиями.