Article View: comp.sys.ibm.pc.programmer
Article #110int24.c - intercept ugly Abort Retry Ignore prompts
From: Joel Spolsky
Date: Wed, 21 Mar 1990 20:37
Date: Wed, 21 Mar 1990 20:37
135 lines
8280 bytes
8280 bytes
Hi!
Enclosed, uuencoded, please find int24.c. It is a routine I wrote to
trap interrupt 24 and provide a slightly more user-friendly error
message than DOS's usual "Abort, Retry, Ignore...". I thought I'd post
it here in case anyone found it useful.
To use this, just call install_24() at the beginning of your program
and uninstall_24() at the end. If there is a disk error the interrupt
will pop up a slightly more friendly message, let the user choose a
course of action, and restore the screen. The two most common errors,
namely, write-protection and no disk in drive, generate more
meaningful error messages than weird errors.
This is in Turbo-C. I had to uuencode it because I used some
extended line drawing characters for the pop-up box. It's probably
easily portable to other compilers. It works with DOS 2.X and up
although you should know that DOS 2.X didn't allow "fail" so under 2.X
that option won't pop up. (I don't have DOS 2 so I couldn't test that).
Please let me know if you find bugs, have comments, etc. Also if you
port this to another compiler, please send me the port so I can
incorporate it.
+----------------+----------------------------------------------------------+
| Joel Spolsky | bitnet: spolsky@yalecs.bitnet uucp: ...!yale!spolsky |
| | internet: spolsky@cs.yale.edu voicenet: 203-436-1538 |
+----------------+----------------------------------------------------------+
#include <disclaimer.h>
begin 644 int24.c
M+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ"B!I;G0R-"YC"@H@*$,I(#$Y.3 @2F]E;"!3<&]L<VMY
M+"!!;&P@4FEG:'1S(%)E<V5R=F5D+@H@"B!4:&ES(&-O9&4@:7,@<F5L96%S
M960@:6YT;R!T:&4@<'5B;&EC(&1O;6%I;B!B>2!T:&4@875T:&]R+@H@66]U
M(&-A;B!D;R!W:&%T979E<B!Y;W4@=V%N="!W:71H(&ET+B!0;&5A<V4@;&5T
M(&UE(&MN;W<*(&EF('EO=2!F:6YD(&ET('5S969U;"!O<B!I9B!Y;W4@9FEN
M9"!A;GD@8G5G<RX*("HJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*B\*"B\J*B!I;G0R-"YC"B J*@H@
M*BH@26YT97)R=7!T(#(T($AA;F1L97(@=F5R<VEO;B P+CD*("HJ"B J*B!7
M:&5N($1/4R!H87,@=')O=6)L92!A8V-E<W-I;F<@82!P97)I<&AE<F%L(&ET
M"B J*B!C86QL<R!);G1E<G)U<'0@,'@R-"X@5&AI<R!I<R!U<W5A;&QY(&$@
M<&]I;G1E<B!T;PH@*BH@=&AE(&-O9&4@:6X@0T]-34%.1"Y#3TT@=&AA="!P
M<FEN=',@=&AE(")!8F]R="P@4F5T<GDL"B J*B!)9VYO<F4B(&UE<W-A9V4N
M(%1H:7,@:7,@82!C;VUP;&5T96QY('!O<G1A8FQE(&UO9'5L90H@*BH@=&AA
M="!R97!L86-E<R!T:&%T(&UE<W-A9V4@=VET:"!A('-L:6=H=&QY(&UO<F4@
M865S=&AE=&EC"B J*B!O;F4N"B J*@H@*BH@5&\@=7-E(&ET+"!J=7-T(&-A
M;&P@:6YS=&%L;%\R-"@I+B!4;R!R97-T;W)E('1H92!$3U,*("HJ(&AA;F1L
M97(L(&-A;&P@=6YI;G-T86QL7S(T*"DN(%=A<FYI;F<A($EF('EO=2!E=F5R
M(&=O"B J*B!I;G1O(&=R87!H:6-S(&UO9&4@;V8@<V]M92!S;W)T+"!U;FEN
M<W1A;&P@=&AI<R$@270@=V]N)W0*("HJ(&)E(&%B;&4@=&\@9&5A;"!W:71H
M(&$@9W)A<&AI8W,@<V-R965N(&-O<G)E8W1L>2X*("HJ"B J*B!.;W1E.B!7
M92!D;VXG="!L970@=&AE('5S97(@:6=N;W)E('1H92!E<G)O<BP@=VAI8V@@
M=&AE>2!S:&]U;&1N)W0*("HJ(&)E(&1O:6YG(&%N>7=A>2X*("HJ"B J*B!(
M25-43U)9"B J*B M+2TM+2TM"B J*B Q.2!-87(@.3 )0W)E871E9"!*4PH@
M*BHO"@HC:6YC;'5D92 \8FEO<RYH/@HC:6YC;'5D92 \9&]S+F@^"B-I;F-L
M=61E(#QS=&1I;RYH/@H*(V1E9FEN92!#4DE47T524D]27TA!3D1,15(@*#!X
M,C0I"@HO*BH@1E5.0U1)3TX@4%)/5$]465!%4R J*B\*=F]I9"!I;G-T86QL
M7S(T*'9O:60I.PIV;VED('5N:6YS=&%L;%\R-"AV;VED*3L*=F]I9"!I;G1E
M<G)U<'0@:&%N9&QE7S(T("AU;G-I9VYE9"!B<"P@=6YS:6=N960@9&DL('5N
M<VEG;F5D('-I+ H)"0D@('5N<VEG;F5D(&1S+"!U;G-I9VYE9"!E<RP@=6YS
M:6=N960@9'@L"@D)"2 @=6YS:6=N960@8W@L('5N<VEG;F5D(&)X+"!U;G-I
M9VYE9"!A>"D["G9O:60@9F%S='!R:6YT>BAI;G0@>"P@:6YT('DL(&EN="!A
M='1R+"!C:&%R("IS*3L*"G9O:60@:6YT97)R=7!T("@J;VQD=F5C="DH*3L)
M"0D@( IU;G-I9VYE9"!S8W(["0D)"2\J(%1H92!S96=M96YT('=H97)E('1H
M92!S8W)E96X@:7,@*B\*"B\J*B!I;G-T86QL7S(T"B J*@H@*BH@26YS=&%L
M;',@=&AE(&9A;F-Y(&EN=&5R<G5P="!H86YD;&5R+@H@*BHO"B *=F]I9"!I
M;G-T86QL7S(T*'9O:60I"GL*"6]L9'9E8W0@/2!G971V96-T*$-2251?15)2
M3U)?2$%.1$Q%4BD["2\J('-A=F4@;VQD(&AA;F1L97(@*B\*"7-E='9E8W0H
M0U))5%]%4E)/4E](04Y$3$52+"!H86YD;&5?,C0I.R O*B!A;F0@:6YS=&%L
M;"!O=7)S("HO"@H)+RH@1FEN9"!O=70@:68@=&AE('-C<F5E;B!I<R!A=" P
M>$(P,# @;W(@,'A".# P("HO"@E?04@@/2 P>#!&.PH)9V5N:6YT97)R=7!T
M("@P>#$P*3L*"6EF("A?04P@/3T@-RD*"0ES8W(@/2 P>$(P,# ["@EE;'-E
M"@D)<V-R(#T@,'A".# P.PI]"@H*=F]I9"!U;FEN<W1A;&Q?,C0H=F]I9"D*
M>PH)+RH@4F5S=&]R92!O;&0@:&%N9&QE<B J+PH)<V5T=F5C="A#4DE47T52
M4D]27TA!3D1,15(L(&]L9'9E8W0I.PI]"@IS=&%T:6,@8VAA<B!S8W)E96Y?
M8G5F6SE=6S4R73L)+RH@<F]O;2!F;W(@=&AE('-A=F5D('!A<G0@;V8@<V-R
M965N("HO"@IV;VED(&EN=&5R<G5P="!H86YD;&5?,C0@*'5N<VEG;F5D(&)P
M+"!U;G-I9VYE9"!D:2P@=6YS:6=N960@<VDL"@D)"2 @=6YS:6=N960@9',L
M('5N<VEG;F5D(&5S+"!U;G-I9VYE9"!D>"P*"0D)("!U;G-I9VYE9"!C>"P@
M=6YS:6=N960@8G@L('5N<VEG;F5D(&%X*0I["@H):6YT(&5R<BQK97DL<F5T
M/2TQ.PH):6YT('(L8RQS=&%R=#L*"0H)97)R(#T@9&D@)B P># P1D8["2\J
M($5R<F]R(&UE<W-A9V4L(&9R;VT@1$]3+B J+PH*"2\J(%-A=F4@<V5C=&EO
M;B!O9B!S8W)E96X@=&AA="!W:6QL(&)E(&]V97)W<FET=&5N("HO"@EF;W(@
M*'(].#L@<CPQ-SL@<BLK*2!["@D)<W1A<G0@/2 H,38P("H@<B K(#4T*3L*
M"0EF;W(@*&,],#L@8SPR-CL@8RLK*2!["@D)"7-C<F5E;E]B=69;<BTX75MC
M*C)=(#T@<&5E:V(H<V-R+"!S=&%R="LK*3L*"0D)<V-R965N7V)U9EMR+3A=
M6V,J,BLQ72 ]('!E96MB*'-C<BP@<W1A<G0K*RD["@D)?2 *"7T*"@DO*B!0
M;W @=7 @97)R;W(@;65S<V%G92 J+PH)9F%S='!R:6YT>B@@."PR-RPP># W
M+"+6Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$MR(I.PH)9F%S='!R:6YT>B@@
M.2PR-RPP># W+"*Z17)R;W(A(" @(" @(" @(" @(" @(" @NB(I.PH)9F%S
M='!R:6YT>B@Q,"PR-RPP># W+"*Z(" @(" @(" @(" @(" @(" @(" @(" @
MNB(I.PH*"2\J($-O;6UO;B!D:6%G;F]S86)L92!P<F]B;&5M<R J+PH)<W=I
M=&-H*&5R<BD@>PH)"6-A<V4@,'@P,#H*"69A<W1P<FEN='HH,3$L,C<L,'@P
M-RPBND1I<VL@:7,@=W)I=&4@<')O=&5C=&5D+KHB*3L@8G)E86L["@D)8V%S
M92 P># R.@H)9F%S='!R:6YT>B@Q,2PR-RPP># W+"*Z1&ES:R!D<FEV92!I
M<R!N;W0@<F5A9'DNNB(I.R!B<F5A:SL*"0ED969A=6QT.@H)9F%S='!R:6YT
M>B@Q,2PQ-RPP># W+"*Z1&ES:R!E<G)O<BX@(" @(" @(" @(" @NB(I.R!B
M<F5A:SL*"7T*"@EF87-T<')I;G1Z*#$R+#(W+#!X,#<L(KH@(" @(" @(" @
M(" @(" @(" @(" @(""Z(BD["@EF87-T<')I;G1Z*#$S+#(W+#!X,#<L(KH@
M5')Y(&%G86EN(" @(" @(" @(" @(""Z(BD["@EF87-T<')I;G1Z*#$S+#(Y
M+#!X,&8L(E0B*3L*"69A<W1P<FEN='HH,30L,C<L,'@P-RPBNB!%>&ET('1H
M:7,@<')O9W)A;2 @(" @(+HB*3L*"69A<W1P<FEN='HH,30L,CDL,'@P9BPB
M12(I.PH*"2\J($EN($1/4R S+C P(&%N9"!L871E<BP@=&AE>2!C86X@86QS
M;R!F86EL('1H92!D:7-K(&%C8V5S<R J+PH):68@*%]O<VUA:F]R(#X@,BD@
M>PH)9F%S='!R:6YT>B@Q-2PR-RPP># W+"*Z($-A;F-E;"!T:&ES(&]P97)A
M=&EO;B @NB(I.PH)9F%S='!R:6YT>B@Q-2PR.2PP>#!F+")#(BD["@E]"@EE
M;'-E"@EF87-T<')I;G1Z*#$U+#(W+#!X,#<L(KH@(" @(" @(" @(" @(" @
M(" @(" @(""Z(BD["@H)9F%S='!R:6YT>B@Q-BPR-RPP># W+"+3Q,3$Q,3$
MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$O2(I.PH*"2\J($-A;&P@0DE/4R!T;R!G970@
M82!S:6YG;&4@:V5Y<W1R;VME(&9R;VT@=&AE('5S97(@*B\*"61O('L*"0EK
M97D]8FEO<VME>2@P*3L*"@D):68@*&ME>2 F(#!X,#!&1BD*"0D):V5Y("8]
M(#!X,#!&1CL*"@D)<W=I=&-H*&ME>2D@>PH)"6-A<V4@)W0G.B!C87-E("=4
M)SH@<F5T(#T@,'@P,# Q.R!B<F5A:SL*"0EC87-E("=E)SH@8V%S92 G12<Z
M(')E=" ](#!X,# P,CL@8G)E86L["@D)8V%S92 G8R<Z(&-A<V4@)T,G.B!I
M9B H7V]S;6%J;W(@/B R*2!R970@/2 P># P,#,[(&)R96%K.PH)"61E9F%U
M;'0Z(&)R96%K.PH)"7T*"@E]('=H:6QE("AR970@/" P*3L*"0H)+RH@4F5S
M=&]R92!T:&%T('-E8W1I;VX@;V8@=&AE('-C<F5E;B J+PH)9F]R("AR/3@[
M('(\,3<[('(K*RD@>PH)"7-T87)T(#T@*#$V,"IR("L@-30I.PH)"69O<B H
M8STP.R!C/#(V.R!C*RLI('L*"0D)<&]K96(H<V-R+"!S=&%R="LK+"!S8W)E
M96Y?8G5F6W(M.%U;8RHR72D["@D)"7!O:V5B*'-C<BP@<W1A<G0K*RP@<V-R
M965N7V)U9EMR+3A=6V,J,BLQ72D["@D)?0H)?0H*"6%X(#T@<F5T.PHO*B!!
M;F0@<&QE87-E(&1O;B=T('1E;&P@;64@22!D:61N)W0@=7-E(&%N>2!O9B!T
M:&]S92!P87)A;65T97)S+B J+PHC<')A9VUA('=A<FX@+7!A<@I]"B-P<F%G
M;6$@=V%R;B N<&%R"@H*+RH@9F%S='!R:6YT>B M('-H;W9E(&%N(&%S8VEZ
M('-T<FEN9R!O;G1O('1H92!S8W)E96X@*B\*=F]I9 IF87-T<')I;G1Z*&EN
M="!Y+"!I;G0@>"P@:6YT(&%T='(L(&-H87(@*G,I"GL*"6EN="!I/3 L8F%S
M93L*"@EB87-E(#T@*#@P*GDK>"D\/#$[(" O*B!D971E<FUI;F4@;V9F<V5T
M(&EN=&\@<V-R965N("HO"@EW:&EL92 H<UMI72$],"D@>PH)"7!O:V5B*'-C
M<BP@8F%S92LK+"!S6VDK*UTI.PH)"7!O:V5B*'-C<BP@8F%S92LK+"!A='1R
)*3L*"7T*?0H*
end
Technical Details
Message-ID:
<19736@cs.yale.edu>Path:
arc1-ca.pugleaf.net!utzoo!attcan!uunet!cs.utexas.edu!yale!cs.yale.edu!spolsky-joelShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!cs.utexas.edu!yale!cs.yale.edu!spolsky-joel From: spolsky-joel@CS.YALE.EDU (Joel Spolsky) Newsgroups: comp.sys.ibm.pc.programmer Subject: int24.c - intercept ugly Abort Retry Ignore prompts Message-ID: <19736@cs.yale.edu> Date: 21 Mar 90 20:37:24 GMT Sender: news@cs.yale.edu Reply-To: spolsky-joel@CS.YALE.EDU (Joel Spolsky) Organization: Yale University Computer Science Dept, New Haven CT 06520-2158 Lines: 135