- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< ><FONT color=#ff0000>函数名: harderr </FONT>
, b; I. }0 S& f功 能: 建立一个硬件错误处理程序
$ g% {1 v$ d* F; e5 x) I" {用 法: void harderr(int (*fptr)()); 7 |3 Z( l; U) T
程序例: * L$ Y$ p6 ^6 p: A0 ^. J
<FONT color=#0000ff>/*This program will trap disk errors and prompt
; [0 v% j+ |) P p' Ythe user for action. Try running it with no
: E8 H3 F- N9 d6 i* C8 Idisk in drive A: to invoke its functions.*/ </FONT></P>
9 P; g* c! x/ b9 M6 t2 H/ N' p< ><FONT color=#0000ff>#include <STDIO.H>
, O/ B f9 e [8 l4 M! G6 k& ]9 x6 c#include <CONIO.H>+ h4 \! D# X+ s% E0 o/ o4 K8 n: `
#include <DOS.H>3 ]7 J( N, r' ~) ]/ @ j! M
#define IGNORE 0 # i6 V. L+ h$ E& X q0 g
#define RETRY 1
$ k* V1 t2 [, {& {$ p/ \#define ABORT 2 5 w' F* b8 n: N6 S
int buf[500];
3 b: Y. l, ^/ g) d4 C, F0 B/*define the error messages for trapping disk problems*/ ' k$ K) Y5 k9 X1 l& w$ w
static char *err_msg[] = {
% l1 _7 g( ^# F7 {"write protect", 5 K$ A \8 f; O7 q/ w7 |/ w
"unknown unit",
# D2 o" e. n" U2 W( {0 K7 @/ G"drive not ready", ; Z4 J( J" K; R8 a7 ?1 l; {
"unknown command",
+ q$ N1 }! H. X% k. h3 J$ J"data error (CRC)", : P) L3 n# r, V7 E: n
"bad request", - D: T2 `& |( j
"seek error",
p% [* x5 @5 H. P1 ^"unknown media type", ( X1 D( x. I, q/ _8 Y; G! a" A! X
"sector not found", . C! Y! _& Z+ {
"printer out of paper", ! S+ j5 I: @+ V6 d1 }. |
"write fault", 0 a4 M: h( }9 y0 L3 D( O6 z
"read fault", 0 d) W+ k- e$ u2 y+ W/ v: s
"general failure", " D* H2 Y8 L* D/ R- b4 z
"reserved",
4 u# _' N9 b; o: [. r( R6 ]"reserved", + K, z0 A3 n# f) Z) P
"invalid disk change" 6 r5 O7 ~4 U( X* i, m) ` O# B
}; </FONT></P>
7 m( J4 \, h4 P I8 ?4 \; N; b- m! Y< ><FONT color=#0000ff>error_win(char *msg) , O+ f9 C ]# A3 ~1 x/ |" Z* V; z2 n
{ , ?! y! L$ Z9 y) \
int retval; </FONT></P>
$ O. ^9 b0 Z# B& P+ |1 k% U: m< ><FONT color=#0000ff>cputs(msg); </FONT></P>
+ n$ a! k) ]( l7 [( L! b/ t< ><FONT color=#0000ff>/*prompt for user to press a key to abort, retry, ignore*/ 8 Y" Y! `8 V/ l8 z( y7 T" @( L
while(1)
% H) q! K! y3 u) c, q, l5 f# `+ Y0 q{
! A1 B. e3 v# W1 q9 k2 w, R1 `retval= getch();
7 ~) O: R8 Z4 q- n1 V# jif (retval == 'a' || retval == 'A')
( W" \3 @4 j! f" X X5 z{ 5 M/ E& L- Z; o$ Z [8 o
retval = ABORT;
" ] j1 a& n/ n0 d2 \* Ybreak; / P# I, ^* L/ G% \5 _5 C/ ?
}
* \. s8 W7 Q3 ^: I' J; e7 Tif (retval == 'r' || retval == 'R') 7 n' o3 @: ?9 G" ]$ a2 I
{
( ^" ?4 w5 j/ \retval = RETRY; * D$ Z5 u0 i3 s. F- \
break; 7 K q; \6 z0 h/ w; K
} 3 c5 ?/ T s; Z. H( C0 |
if (retval == 'i' || retval == 'I')
. b J- n& A- _4 R5 g9 I{
% \ v9 j$ f7 ~7 M9 i" iretval = IGNORE;
# P0 w, T- @1 F# j- v# dbreak; * [* {1 Z; W; D9 k8 B
}
& S; }. r1 K) y1 |& X} </FONT></P>
9 Q& h2 O7 C( m0 A( S1 @< ><FONT color=#0000ff>return(retval);
6 o8 i" P; P1 O3 I/ @' W} </FONT></P>
' R. _& R- l& f% [! ?. g< ><FONT color=#0000ff>/*pragma warn -par reduces warnings which occur
2 Z" n' g- H% K9 r$ }due to the non use of the parameters errval,
5 M* O0 o( O. v9 x; j3 ubp and si to the handler.*/ " V4 y2 q$ \5 Z2 w
#pragma warn -par </FONT></P>
3 @4 B5 B+ F6 D% u/ N' c7 z< ><FONT color=#0000ff>int handler(int errval,int ax,int bp,int si) 4 }# {$ k2 y& q( J
{
5 u% L1 [8 ~3 R9 W- [0 hstatic char msg[80]; ! Q$ x. Z% }4 _3 n
unsigned di; " c' D; a- U2 g+ h' k$ t
int drive;
3 ?* f e* V. Xint errorno; 3 j1 Q1 K) \# _6 |
di= _DI; ' p( }% h% A& a$ {- B7 F
/*if this is not a disk error then it was ; w, [$ t: a1 Y. v, w. ?' E
another device having trouble*/ </FONT></P>
* R: a; P' [9 A6 y! W$ J4 g< ><FONT color=#0000ff>if (ax < 0) $ i i! R" c7 l5 g
{ 1 X* F# z6 D5 D1 v. O
/* report the error */ : O4 H& F* b0 E
error_win("Device error");
5 P8 o. n& K+ }: C! h N/* and return to the program directly requesting abort */ 5 q/ [$ u; v) m: p2 y0 t+ g
hardretn(ABORT); / x0 u$ ?; p; {" v. f! \# {7 o
}
/ q% f1 ?8 S! l5 ?/* otherwise it was a disk error */ 5 d. r8 a+ P0 E% l2 [$ L* ?( G
drive = ax & 0x00FF;
7 h. X1 x' n6 J+ ^errorno = di & 0x00FF;
, P- J2 H: r6 }1 I3 V& j4 {' l- J9 H- T/* report which error it was */
' U+ z5 U( e' C+ |# F, z& `sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",
B8 R- k: `+ | ~err_msg[errorno], 'A' + drive);
% B% D- y" B! f6 X$ j5 F/*
, Z- Z1 M( ~7 V* l) G8 }. freturn to the program via dos interrupt 0x23 with abort, retry, 2 w0 m6 A& |4 M# l6 }' ?
or ignore as input by the user. : T' d) b& e& E
*/
/ }1 M8 @* \& |# Fhardresume(error_win(msg));
! z/ @- b; D: A& h/ `return ABORT;
/ z( u/ x$ o0 [3 f7 ~5 h* X}
$ ^, r' @3 p4 u$ l/ h#pragma warn +par </FONT></P>: J2 j5 ~- o; ?( _: e- _! a( {
< ><FONT color=#0000ff>int main(void)
8 p( k: k; O4 N: c" `) }" O' W{ 3 v9 U* ~% W: u+ s' k* _
/*
6 z; ^: t. C; J9 |' N, A3 H/ G) |6 ginstall our handler on the hardware problem interrupt 7 b5 M [5 p$ S! H5 O, T- H7 B6 N! X
*/ , r+ [ T$ { h4 o8 h
harderr(handler);
* w% M8 [, D5 R/ ^4 E& a* C: N& [3 bclrscr(); / o+ k2 F0 K! G7 a9 A
printf("Make sure there is no disk in drive A:\n");
/ A+ L" Z$ e6 W4 f" Oprintf(" ress any key ....\n"); ' P7 m, T2 u- f% i: g
getch();
. g4 V7 n! Q+ J5 eprintf("Trying to access drive A:\n"); + H" w- V Z( Y3 E8 U ^8 F1 s
printf("fopen returned %p\n",fopen("A:temp.dat", "w"));
6 b% D! f) Z+ n/ w7 ]3 [return 0; 7 q# h# a3 ?& j) W4 a1 D$ X
} / X j8 P' r% M; A
</FONT>
, Z$ f# w4 T7 Z Q& V</P>2 t# d/ c8 d, Q% D. f
< ><FONT color=#ff0000>函数名: hardresume </FONT>% ?- s5 }4 U" U
功 能: 硬件错误处理函数 ; ^; j: `1 O4 ^% D
用 法: void hardresume(int rescode);
- X# K/ c$ q' V& d1 n1 s. \程序例: \/ N5 ?6 ^) m
</P>1 Q$ s# o/ U" K4 D, s9 d
< ><FONT color=#0000ff>/* This program will trap disk errors and prompt the user for action. */
, O; k8 g. V3 ~0 B# j7 `( o/* Try running it with no disk in drive A: to invoke its functions */ </FONT></P>
" { l! M8 A8 H- p6 E% w1 [< ><FONT color=#0000ff>#include <STDIO.H>
, b$ y, n+ E" D8 i$ ~5 g#include <CONIO.H>8 v5 C; _# s0 F
#include <DOS.H></FONT></P>
+ I' W. Q) _% p+ [< ><FONT color=#0000ff>#define IGNORE 0 ; O% z- W" I. ?; P- L+ g1 }
#define RETRY 1
* d1 C( `$ V0 c7 Q! I- D: V#define ABORT 2 </FONT></P>
_1 }1 t/ B( |6 J5 i< ><FONT color=#0000ff>int buf[500]; </FONT></P>6 q+ x+ @! g. w& e5 ~9 p5 f9 S+ B
< ><FONT color=#0000ff>/* define the error messages for trapping disk problems */ 6 g$ {; k: B( E$ g
static char *err_msg[] = { 1 s7 L( t9 t2 u# @' y2 {3 f
"write protect",
: v6 U& Q2 S7 D4 n"unknown unit", - j5 {0 L2 k, G4 R G' Y; g
"drive not ready",
, B* G1 m4 w' A"unknown command", 7 U4 e" W& D8 `7 S S3 t9 a, E
"data error (CRC)",
, i5 j* f5 q; c. Y# @"bad request",
; Y4 ~* z! K' e+ t"seek error",
& O* Z! z4 _+ p$ I0 ~8 F"unknown media type", 7 J; s* r& A# i; z; q' d) @! a4 C
"sector not found", 1 x# K% ~/ q9 r% l: S
"printer out of paper", " O; P3 j7 R9 I
"write fault", % Q# B+ u8 C8 r7 B F
"read fault", 0 E. X3 ~) T$ r% t
"general failure",
2 j6 }1 q: i' F/ Q0 F }"reserved",
5 V# P1 W5 r$ Z9 |' q"reserved", ; Y* ]$ g; H: ~# M. |
"invalid disk change"
" p* ]' ]; ?3 n, l* K}; </FONT></P>' N$ Z8 n8 q7 ^
< ><FONT color=#0000ff>error_win(char *msg) , m* k+ B# n$ ? i' q
{ g8 E' p! K3 o/ _0 L; H
int retval; </FONT></P>
" Z% L/ z! d9 h2 F2 Q/ @! O< ><FONT color=#0000ff>cputs(msg); </FONT></P>2 r; z! g3 r S S
< ><FONT color=#0000ff>/* prompt for user to press a key to abort, retry, ignore */ - W$ o8 I. b9 o9 S
while(1) 9 J" y' n U& Q$ ]7 T, _
{ " w3 p1 T% Z* W l, X! C+ o
retval= getch();
/ b1 h* W; `$ t3 `! \. J! Yif (retval == 'a' || retval == 'A')
9 l% S; H( D& L/ a5 s{
* s: n- E" d( gretval = ABORT;
& \4 \1 R* {2 b0 D' ]+ m) d6 ?3 rbreak; 0 L9 i! K9 g0 C4 K& @# L
}
. J2 a+ o: f" z* eif (retval == 'r' || retval == 'R')
) N7 ] b" a* {+ R* g# I( J{ ' s, _/ O5 k) V2 {9 o
retval = RETRY;
+ ]* W3 T% q" j2 s+ Z- ubreak; / \& R: O' n1 ]! m
} 9 N& c4 i8 D+ g2 L$ H: O2 j' Z4 s
if (retval == 'i' || retval == 'I')
1 v9 c7 @% }! _{ " M; b: r! h9 F6 B3 b$ ^8 m
retval = IGNORE; , d! _# Q" ]/ z' U4 v
break; ( |5 p0 W# T' g) P
} ; }3 k* W) U' C; Z0 Z' }4 Z( B8 L
} </FONT></P>
: @6 K1 |& w) y/ d6 q< ><FONT color=#0000ff>return(retval);
. ~$ Y( ?- Y- Y/ w) O- N6 O} </FONT></P>
# B2 g* }0 o4 S. c9 c< ><FONT color=#0000ff>/* pragma warn -par reduces warnings which occur due to the non use */
$ u( L$ h+ g# V+ m/* of the parameters errval, bp and si to the handler. */
! a/ z1 F0 D3 \* v#pragma warn -par </FONT></P>
/ I1 T% \2 g+ i' U1 P8 L& q) H< ><FONT color=#0000ff>int handler(int errval,int ax,int bp,int si)
$ w7 z4 @: ?% q% q7 @{ 9 S8 h( e8 c. J. |8 h, l1 F
static char msg[80];
. M! i' x2 c6 tunsigned di; O4 `( B X6 U& p$ {, u( h k
int drive; , S: C3 x! y! p, y
int errorno; </FONT></P>
3 |+ f. |) Y" j# @< ><FONT color=#0000ff>di= _DI;
# ]1 {, `# W( {. l2 A/* if this is not a disk error then it was another device having trouble */ </FONT></P>' n; M0 T3 P" T8 ]3 B' a& ], h
< ><FONT color=#0000ff>if (ax < 0)
8 R8 F( Q& y, m4 R{
* q r3 B8 ?7 l' \/* report the error */ % t; H( G3 v1 ~2 y- e$ G7 b- P
error_win("Device error"); * Z7 h: \/ C* G6 T
/* and return to the program directly
7 ~, a! G1 T* v trequesting abort */ " h2 d3 i* ]* ?& z) `0 Z! J& S
hardretn(ABORT);
9 `5 h5 R y; V' T- s} : p! ~) x, R1 @! A4 t8 w1 x# f: I7 M
/* otherwise it was a disk error */ - h# [2 l- a, ^ {
drive = ax & 0x00FF;
. `0 T- o Q5 }( m5 \5 j) h- K; ierrorno = di & 0x00FF;
) K' B/ R& ^% }2 L" U. n/* report which error it was */
1 U$ V7 d( d+ }sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",
3 V- h: ? q4 l) B. L- j# O3 {err_msg[errorno], 'A' + drive);
+ Z2 A! E0 \: b J1 e! O! V# C/* return to the program via dos interrupt 0x23 with abort, retry */ ( S1 U3 S) G. C* h6 b
/* or ignore as input by the user. */
4 d' b; S4 E M# `+ thardresume(error_win(msg)); 0 V( J8 W' G }! |& e# f( ]
return ABORT;
6 c1 k8 T/ O7 b' z6 V# u}
5 N+ B7 x. R) j, \1 e#pragma warn +par </FONT></P>3 s5 L9 @0 G; l \$ e8 v/ H( L% j
< ><FONT color=#0000ff>int main(void) % F+ J. Q7 Y+ _0 T4 u3 B
{ # Q6 o4 B& V: n3 S# L
/* install our handler on the hardware problem interrupt */
) o- R7 N' L5 Lharderr(handler);
, q6 N0 U7 o4 N9 yclrscr();
6 C, ^( h; K* x. t/ f% }0 qprintf("Make sure there is no disk in drive A:\n"); . p! K3 j+ P; G( j/ ^# i
printf(" ress any key ....\n");
% K ~* v1 B: C5 ~% L- R: e" N+ x; Agetch();
% w* x" }# W X& |+ Pprintf("Trying to access drive A:\n"); ; D3 u3 l) o% B
printf("fopen returned %p\n",fopen("A:temp.dat", "w"));
/ O" Q' I0 [; _$ W s* Jreturn 0;
0 O1 ]" s: }; c+ b; X4 O}
& l7 R9 b: G# S+ |* a6 @: d7 ~2 e</FONT>
0 D/ Z, x3 N- B: S$ |0 }1 ^</P>
- h, v' K8 z( A7 Z% d< ><FONT color=#ff0000>函数名: highvideo </FONT>
( y+ i6 b4 {5 f5 Q w$ n功 能: 选择高亮度文本字符
) @! M4 {3 \9 L) B p4 X6 _# }用 法: void highvideo(void);
( H- }7 [* n2 |9 p/ _程序例: </P>
6 u/ H. H1 i: j9 L2 J: Z< ><FONT color=#0000ff>#include <CONIO.H></FONT></P>2 H$ f6 {4 n# O/ c
< ><FONT color=#0000ff>int main(void) & d" s7 b2 s! e M, ?( y
{ 7 e& ?* ?. G# _7 |! ~ s7 y
clrscr(); </FONT></P>
6 n2 V/ a, G; d |7 h<P><FONT color=#0000ff>lowvideo(); 2 u! e$ |; A. A3 I+ E
cprintf("Low Intensity text\r\n");
5 h6 C9 L4 Y6 S" L& P o# Qhighvideo();
# O" ]. ?8 i, _. b; |, Q* Egotoxy(1,2);
) F- U$ D- J4 C/ z" Zcprintf("High Intensity Text\r\n"); </FONT></P>
: `. G2 x$ n/ C- T<P><FONT color=#0000ff>return 0; 3 R5 O! |/ B& v9 Q. w6 T
}
! e: r# G% O7 I$ V5 j</FONT>2 M( d0 J* \/ T
</P>
# P# k, _! i. J) T0 U9 Y<P><FONT color=#ff0000>函数名: hypot </FONT>
( o, R& y* t/ _, B$ _功 能: 计算直角三角形的斜边长 k& U3 F. I5 x, b: A6 U
用 法: double hypot(double x, double y);
4 H! g1 @& v! @2 r程序例: </P>0 ]8 H* P. B. f3 S+ N
<P><FONT color=#0000ff>#include <STDIO.H>4 r0 O7 ?5 N. t: V5 T
#include <MATH.H></FONT></P>7 z9 Z- Q% F8 O* B" ?6 h
<P><FONT color=#0000ff>int main(void) 9 V; f0 N0 K F* _- j3 z0 d8 [& F. t& x
{ 0 g$ o6 K! Z# A* K7 h2 z. b
double result;
# d) g" ^3 }/ [/ R! i' }double x = 3.0; 8 e5 v5 `3 y8 Y8 `3 A
double y = 4.0; </FONT></P>) A5 z! o: x* w/ b
<P><FONT color=#0000ff>result = hypot(x, y);
d% z4 X/ {! V/ uprintf("The hypotenuse is: %lf\n", result); </FONT></P>
8 p- b# Z, x/ D. F$ ?! q0 F8 [<P><FONT color=#0000ff>return 0;
+ i8 x8 c0 ~& {( Q3 X} </FONT>
3 w1 m; Q, Q& Y9 P% o</P> |
zan
|