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