[comp.sys.ibm.pc.programmer] int24.c - intercept ugly Abort Retry Ignore prompts

spolsky-joel@CS.YALE.EDU (Joel Spolsky) (03/22/90)

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