Справочник по функциям С++. Подпрограммы классификации Подпрограммы преобразования
Скачать 3.41 Mb.
|
harderr----------------------------------------------------------------- Назначение Устанавливает обработчик ошибок оборудования. Синтаксис void harderr(int(*fptr)()); Прототип в dos.h Замечания harderr устанавливает обработчик ошибок оборудования для текущей программы. Этот обра- ботчик включается, когда возникает прерывание 0 х24. (Смотри Руководство программиста MS-DOS для ознакомления с прерываниями.) Функция, на которую указывает fptr, будет выз- вана, когда возникнет прерывание. Обработчик будет вызван со следующими аргументами. harderr(int errval,int ax,int bp,int si); errval - код ошибки, помещенный в регистр DI системой. ax,bp и si - значения, установленные MS-DOS для AX,BP,SI регистров соответственно. * ax показывает, случилась ли ошибка диска или другого устройства: если ax не отрицательно, то ошибка на диске, иначе это ошибка устройства. Для ошибок диска ax логически складывается с 0 x00FF и в результате получается номер диска (1= А, 2=В и т.д.) * bp и si указывают на заголовок драйвера оши- бочного устройства (содержат сегмент адреса и смещение соответствено). Указанная функция не вызывается прямо. harderr устанавливает обработчик прерываний DOS, кото- рый и вызывает ее. peek и peekb могут использоваться для получения информации об устройстве из заголовка. Обработчик может использовать вызов bdos 1 че- рез 0хС, но все остальные вызовы bdos будут подменены MS-DOS. В частности, любой из стан- дартных вызовов ввода-вывода Си или эмулятора UNIX не может быть использован. Заголовок драйвера может не изменяться через вызов poke или pokeb. Обработчик должен возвращать 0 для игнорирова- ния, 1 для новой попытки и 2 для аварийного окончания. Возвращаемое Нет. значение Переносимость Уникальна для MS-DOS. Смотри также hаrderesume, hardretn, peek, poke Пример #include #include #define DISPLAY_STRING 0x09 #define IGNORE 0 #define RETRY 1 #define ABORT 2 int handler(int errval,int ax,int bp,int si) { char msg[25]; int drive; if (ax < 0) { /* ошибка устройства */ bdosptr(DISPLAY_STRING,"ошибка устройства$", 0); hardretn(-1); } drive = (ax & 0x00F); sprintf(msg,"ошибка диска на устройстве %c$", 'A' + drive); bdosptr(DISPLAY_STRING,msg,0); return(ABORT); } main() { harderr(handler); printf("Убедитесь, что в дисководе A нет" " диска\n"); printf("Нажмите по готовности любую" " клавишу..."); getch(); printf("Попытка доступа к A\n"); fopen("A:ANY.FIL","r"); } Результат выполнения программы Убедитесь, что в дисководе A нет диска Нажмите по готовности любую клавишу... Попытка доступа к A Ошибка диска на устройстве A ----------------------------------------------------------------- hardresume----------------------------------------------------------------- Назначение Функция обработки ошибки оборудования. Синтаксис void hardresume(int resolve); Прототип в dos.h Замечания Обработчик ошибок, установленный функцией harderr, может возвращаться в MS-DOS, вызвав для этого hardresume. Возвращаемое значение об- работчика или rescode (код результата) hardresume содержит индикатор аварийного окон- чания (2), повтора (1) или игнорирования ошибки (0). Аварийное окончание сопровождается преры- ванием DOS 0x23 (Ctrl-break). Возвращаемое Нет. значение Переносимость Уникальна для MS-DOS. Смотри также haderr, hadretn ----------------------------------------------------------------- hardretn----------------------------------------------------------------- Назначение Функция обработки ошибки оборудования. Синтаксис void hardretn(int errcode); Прототип в dos.h Замечания Обработчик ошибок, установленный функцией haderr, может возвращаться прямо в прикладную программу по вызову hardretn. Обработчик должен возвращать 0 - для игнорирования ошибки уст- ройства, 1 - для повторного обращения, 2 - для завершения программы. Возвращаемое Нет. значение Переносимость Уникальна для MS-DOS. Смотри также haderr, hadresume Пример Смотри harderr ----------------------------------------------------------------- |