功 能: 建立一個硬體錯誤處理程式
用 法: void harderr(int (*fptr)());
程式例:
/*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;
}
函式名: hardresume
功 能: 硬體錯誤處理函式
用 法: 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;
}
函式名: highvideo
功 能: 選擇高亮度文本字元
用 法: void highvideo(void);
程式例:
#include <conio.h>
int main(void)
{
clrscr();
lowvideo();
cprintf("Low Intensity text\r\n");
highvideo();
gotoxy(1,2);
cprintf("High Intensity Text\r\n");
return 0;
}
函式名: hypot
功 能: 計算直角三角形的斜邊長
用 法: double hypot(double x, double y);
程式例:
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 3.0;
double y = 4.0;
result = hypot(x, y);
printf("The hypotenuse is: %lf\n", result);
return 0;
}
相關詞條
-
java與c
Java的通用性好,可以跨平台直接移植,只要有安裝Java虛擬機(JVM)就可以了。開發的效率高。生成的機器碼效率沒有彙編和C的高。在目前的嵌入式系統中...
計算機語言 與C語言 Java簡介 C語言簡介 與c語言比較 -
邏輯學語言
人類所使用的語言,可以分為三類:自然語言(如:英語和漢語)、半形式化語言(如:數學的語言。即:自然語言加特定的符號)和形式化語言(如:邏輯的語言)。
邏輯學的發展 結 論 -
vim[Unix及類Unix系統文本編輯器]
Vim是一個類似於Vi的著名的功能強大、高度可定製的文本編輯器,在Vi的基礎上改進和增加了很多特性。 VIM是自由軟體。 Vim普遍被推崇為類Vi編輯器...
發展歷程 主要功能 學習方法 高效率移動 高效的輸入 -
A類宏程式
P#101 P#101 P#101
-
《上帝擲骰子嗎》
《上帝擲骰子嗎》 摘要 愛因斯坦:「一個人的價值,應該看他貢獻了什麼,而不是他取得了什麼。」 愛因斯坦說:「我不相信上帝是靠擲骰...
《上帝擲骰子嗎》 序 第一章 黃金時代 第二章 烏雲 第三章 火流星 -
plo[計算機編程語言]
PL0語言是一種類PASCAL語言,是教學用程式設計語言,它比PASCAL語言簡單,作了一些限制。PL0的程式結構比較完全,賦值語句作為基本結構,構造概...
plo簡介 文法規則 設計思想 編譯程式的功能 過程及函式 -
MD5算法
算法的描述和C語言 原始碼在Internet RFCs 1321中有詳細...16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函式運算...,那么Y,否則Z。函式H是逐位奇偶操作符。 假設Mj表示訊息的第j...
一、MD5算法 二、算法描述 三、MD5的安全性 四、C++算法 四、Java算法 -
VIM
程式語言,新手推薦學C,java入門,做一道50行代碼的課後習題,來感受...成為類Unix系統用戶最喜歡的文本編輯器。 使用vim先知道其設計理念...。2001 年的 Vim 6.0 版本加入了代碼摺疊、外掛程式、多國語言支持...
發展歷程 主要功能 學習方法 高效率移動 高效的輸入 -
string
// 注意是,不是,帶.h的是C語言中的頭檔案using std...是一樣的,以下只用string作介紹:string類的構造函式...(int n,char c); //用n個字元c初始化此外,string類...
語言概述 字元類型 C++中