Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TCLR-3Ar.doc
Скачиваний:
14
Добавлен:
12.07.2019
Размер:
664.58 Кб
Скачать

0, Если необходимо игнорировать ошибку, 1, если

нужно повторить операцию и 2 для завершения прог-

раммы.

Возвращаемое Нет.

значение

Переносимость Функция уникальна для DOS.

Смотрите также hardresume, hardretn, peek, poke.

Пример:

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#define IGNORE 0

#define RETRY 1

#define ABORT 2

/* определим сообщения об ошибке для дисковода */

static char *err_msg[] = {"диск защищен от записи",

"неизвестное устройство",

"дисковод не готов",

"неизвестная команда",

"ошибка данных (CRC)",

"ошибка поиска",

"неизвестный тип носителя",

"ненайден сектор",

"в принтере нет бумаги",

"сбой при записи",

"ошибка при чтении",

"неустранимая ошибка",

-230-

"зарезервирован",

"зарезервирован",

"неверная смена диска"

};

error_win(char *msg)

{

int retval;

cputs(msg);

/* запрос у пользователя дальнейших действий */

while(1)

{

retval = getch();

if(retval == 'a' || retval == 'A')

{

retval = ABORT;

break;

}

if(retval == 'r' || retval == 'R')

{

retval = RETRY;

break;

}

if(retval == 'i' || retval == 'I')

{

retval = IGNORE;

break;

}

}

return(retval);

}

/* прагма warn -par исключае выдачу предупреждений о том, что

в подпрограмме не используются параметры errval,bp и si */

#pragma warn -par

int handler(int errval, int ax, int bp, int si)

{

static char msg[80];

unsigned di;

int drive;

int errno;

di = _DI;

/* если это не ошибка диска, то проблемы возникли у

другого устр-ва */

if(ax<0)

{

/* сообщить об ошибке */

error_win("Ошибка устройства");

/* и вернуть управление программе */

hardretn(ABORT);

}

/* иначе это ошибка диска */

drive = ax&0x00ff;

errno = di & 0xff;

/* сообщить, что за ошибка */

sprintf(msg,"Ошибка: %s на дисководе %c\r\nA)bort, R)etry,

I)gnore:",err_msg[errno],'A'+drive);

/* вернуть управление программе */

hardresume(error_win(msg));

return ABORT;

-231-

}

#pragma warn +par

int main(void)

{

/* установить программу обработки прерывания */

harderr(handler);

printf("Make sure there is no disk in drive A:\n");

printf("Press a key when ready...\n");

getch();

printf("Attempting to access A:\n);

fopen("A:ANY.FIL","r");

return 0;

}

hardresume

Функция Функция обработки ошибок электронного оборудова-

ния.

Синтаксис #include<dos.h>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]