ременные имеют значения соответственно 0 и NIL, никакого сообщения не выдается.

Создадим новый модуль с именем UsrE-xit, в интерфейсной части которого будет объявлена процедура UserExit. Эту процедуру может использовать любая программа для выдачи развернутой диагностики в момент аварийного завершения:

{=============} UNIT UsrExit; {=====^=========}

INTERFACE var

OldExit: Pointer; {Старое значение ExitProc} Procedure UserExit;

{Процедура выхода. Осуществляет печать диагностического

сообщения и завершает работу программы.} Function HexB(b: Byte): String;

{Перевод байта в 16-ричное представление} Function HexW(n: Word): String;

{Перевод слова в 16-ричное представление}

IMPLEMENTATION Procedure UserExit;

{Процедура выхода. Осуществляет печать диагностического

сообщения и завершает работу программы.} var

txt: String;

begin {UserExit}

ExitProc := OldExit; {Восстанавливаем работу

стандартной процедуры выхода}

WriteLn ('Ошибка при выполнении программы');

case ExitCode of

1: txt := 'Неверный номер функции';

2: txt := 'He найден файл';

3: txt := 'He найден путь';

4: txt := 'Слишком много открытых файлов';

5: txt ^ 'Отказано в доступе к файлу';

6: txt := 'Недопустимый файловый дескриптор';

12: txt := 'Недопустимый код доступа к файлу';

15: txt := 'Недопустимый номер дисковода';

16: txt := "Нельзя удалить текущий каталог';

17: txt := 'Нельзя указывать разные дисководы';

100: txt := 'Ошибка чтения с диска';

101: txt := 'Ошибка записи на диск';

102: txt := 'Файлу не присвоено имя';

103: txt := 'Файл не открыт';

104: txt := 'Файл не открыт для ввода';

105: txt := 'Файл не открыт для вывода';

106: txt := 'Неверный числовой формат';

150: txt := 'Диск защищен от записи';

151: txt :== 'Неизвестный модуль';