C语言

A 开头函数 B 开头函数 C 开头函数 D 开头函数 E 开头函数 F 开头函数 G 开头函数 H 开头函数 I 开头函数 K 开头函数 L 开头函数 M 开头函数 O 开头函数 P 开头函数 R 开头函数 S 开头函数 T 开头函数 U 开头函数 V 开头函数 _ 开头函数 转换函数 诊断函数 接口函数 字符判别函数 目录函数 输入输出函数 数学函数 操作函数 进程函数 字符串操作函数 时间日期函数 存储分配函数 assert.h头文件 alloc.h头文件 ctype.h头文件 dir.h头文件 dos.h头文件 errno.h头文件 fcntl.h头文件 float.h头文件 graphics.h头文件 io.h头文件 limits.h头文件 malloc.h头文件 math.h头文件 mem.h头文件 process.h头文件 setjmp.h头文件 share.h头文件 signal.h头文件 stdarg.h头文件 stddef.h头文件 stdio.h头文件 stdlib.h头文件 string.h头文件 time.h头文件 values.h头文件

函数名: hardresume
功  能: 硬件错误处理函数
用  法: #include <dos.h>
        void hardresume(int rescode);
程序例:
 

/* This program will trap disk errors and prompt the user for action. */
/* Try running it with no disk in drive A: to invoke its functions    */

#include <stdio.h>
#include <conio.h>
#include <dos.h>

#define IGNORE  0
#define RETRY   1
#define ABORT   2

int buf[500];

/* define the error messages for trapping disk problems */
static char *err_msg[] = {
    "write protect",
    "unknown unit",
    "drive not ready",
    "unknown command",
    "data error (CRC)",
    "bad request",
    "seek error",
    "unknown media type",
    "sector not found",
    "printer out of paper",
    "write fault",
    "read fault",
    "general failure",
    "reserved",
    "reserved",
    "invalid disk change"
};

error_win(char *msg)
{
   int retval;

   cputs(msg);

/* prompt for user to press a key to abort, retry, ignore */
   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);
}

/* pragma warn -par reduces warnings which occur due to the non use */
/* of the parameters errval, bp and si to the handler.              */
#pragma warn -par

int handler(int errval,int ax,int bp,int si)
{
   static char msg[80];
   unsigned di;
   int drive;
   int errorno;

   di= _DI;
/* if this is not a disk error then it was another device having trouble */

   if (ax < 0)
   {
      /* report the error */
      error_win("Device error");
      /* and return to the program directly
      requesting abort */
      hardretn(ABORT);
   }
/* otherwise it was a disk error */
   drive = ax & 0x00FF;
   errorno = di & 0x00FF;
/* report which error it was */
   sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",
           err_msg[errorno], 'A' + drive);
/* return to the program via dos interrupt 0x23 with abort, retry */
/* or ignore as input by the user.  */
   hardresume(error_win(msg));
   return ABORT;
}
#pragma warn +par

int main(void)
{
/* install our handler on the hardware problem interrupt */
   harderr(handler);
   clrscr();
   printf("Make sure there is no disk in drive A:\n");
   printf("Press any key ....\n");
   getch();
   printf("Trying to access drive A:\n");
   printf("fopen returned %p\n",fopen("A:temp.dat", "w"));
   return 0;
}