Contents of the CRITTER.DOC file
A Critical Error Handler
For Use with the CXL Library
Copyright 1989 by TANSTAAFL Software
This product is a programmer-usable critical error handler
for programmers using the CXL 5.0 library and Microsoft C
5.x. One library call will install this error handler
for the duration of program execution. This routine
will work with any TEXT program, on a variety of supported
monitors (MDA, CGA, HGA, EGA, & VGA). This version does
handle monochrome monitors, albeit in a slightly roundabout
2) Instructions For Use
In your software, put a call in during your initialization
to install_critical(). This routine consists of two lines
The first call is a CXL call to initialize the video system,
which I assume you are already using. The second call uses
the Microsoft C routine _harderr to install the routine
named critter(). The header file critter.h contains the
function prototypes for these two functions. After this
routine is installed, all critical errors will be handled
in a much more pleasant manner than how DOS does it.
To handle a monochrome monitor, set the monochrome flag
in the video info structure. For instructions on how to
do this, look at the CXL demo software source code.
3) Critical Error Handler Theory
Critical errors are caused by hardware errors, generally
in disk drives. These errors may be minor (such as printer
out of paper, or drive door open) or fairly catastrophic
(like a scrambled FAT or dead hard disk). A critical
error can be caused by virtually any DOS call EXCEPT
interrupts 25h and 26h (Absolute Disk Read & Write).
A critical error is associated with a device, and can
be either a block device (disk drives), or a character
device (printer, keyboard, clock, etc.). Each time the
error handler is called, parameters are passed which
indicate which error occured and where it happened.
The Critter critical error handler will give the following
Error Code Write Protected Disk
Drive Not Ready
CRC Error In Data
Bad Drive Request
Unknown Media Type
Sector Not Found
Printer Out Of Paper
Removable Media Change
Error Cause Read Operation
Error Location System Area
File Allocation Table
Internal Copy Of FAT
Other Info (char) Device Name
(block) Drive Designator
Possible responses to a critical error are Abort, Ignore,
Retry, or Fail. Not all responses are possible at all
times - it depends on the error and the version of DOS.
The Critter routine enables only those responses that
DOS will allow at the time.
4) Test Results
Unfortunately, this routine is hard to completely test.
Several easy errors can be generated. These include
the write protect error, the drive not ready error,
the paper out error, and the read & write faults.
Other errors could be tested if someone wanted to
cause them physically, such as unplugging the clock
chip or crashing the hard disk (not recommended).
5) Test Software
Included in this package is test.c and test.exe. This
code installs the error handler, then attempts to open
and WRITE to a device/file given on the command line.
So it's easy to test the drive not ready error by not
having a disk in a:, then running TEST A:TEMP. Similar
tests can be done with TEST PRN or TEST COM1. Note that
some printers (or printer cables) cannot signal an out
of paper (or power off) condition. It seems to work ok
with my Epson, but not my Star. I think it's the cable.
As for the DOS version, my research indicates that this
should work for 2.x and above. I don't think there is
any need to support 1.x anymore.
6) Files In This Archive
critter.doc (this file)
critter.h function prototypes
critters.obj small model
critterm.obj medium model
critterl.obj large model
test.c test code source
test.exe test code executable (small model)
7) Future Enhancements
This project has a fair amount of potential. I am
currently converting Critter to be a full-time TSR.
This is harder than other TSR's because DOS does some
kinky things for this interrupt that it does not do for
other interrupts. I expect the TSR version (CRITTSR)
to be finished by mid-June, with release by July. Due
to the oddities of DOS, this product will NOT support
machines with DOS in ROM.
Currently I support Microsoft C, even though CXL supports
several other compilers. I have no current plans to
support these other compilers, but if enough of you want
me to, I will (it would be a good excuse to get a copy of
Turbo C and Zortech C++).
Another planned enhancement is a "programmer's version"
that would present more information than the average user
needs. This includes the contents of the device attribute
word and (for Dos 3.x and above) the extended error codes.
I might release this handler as a "stand-alone" package,
not requiring CXL. I am currently talking about this
with the author of CXL.
8) Terms And Conditions
You may use this routine freely in any non-commercial
software you write. You may distribute this routine
freely as long as the archive file contains all of the
files mentioned above.
Developers of commercial software (software for sale)
are required to purchase an unlimited use license for
$ 50.00. This gets you the source code and the right
to use this in your commercial software products. If
your Ship To address is in Colorado, I have to charge
you sales tax. For Shareware authors, you may use
the routines here in your products for free. If you
want the source, you pay the same $ 50.00.
If you purchase source code, you can receive it on either
5 1/4 or 3 1/2 inch disks. Please indicate preference.
I may be reached by the following methods for feedback:
on GENIE mail address TANSTAAFL
on Prodigy mail address NCDC07A
by phone (303) 989-7389 After 8 AM and before
10 PM MST (Thanks!). I do have an
answering machine, which has an unlimited
message length. I am generally not in
during the day (I have to work, too).
by mail Dana W. Cline
P. O. Box 260075
Lakewood, CO 80226
Feedback of all types is appreciated.
The author claims no responsibility for any damages caused
by the use or misuse of this product. This product is
distributed "as is" with no warranty expressed or implied.
The author will not be responsible for any losses incurred,
either directly or indirectly, by the use of this product.
The author reserves the right to make modifications at any
time. Prices are subject to change without notice.
11) What is CXL?
CXL is a software library of routines to manage windows,
menus, the keyboard, strings, EMS memory, a mouse, and
much more. CXL is available for Microsoft C and several
other compilers. This software requires version 5.x of
CXL ($35 from the author). For more information, contact:
Official CXL Support BBS - (512) 590-0460 1200/2400
CompuServe - 71331,2244
GEnie - M.SMEDLEY
Telstar BBS - (512) 822-8882 1200/2400
U.S. Mail - Mike Smedley
P.O. Box 33603
San Antonio, TX 78265-3603
Order Form TANSTAAFL Software
STATE: ________________________ ZIP CODE: _________________
E-MAIL ADDRESS: _______________________________________________
WHERE DID YOU RECEIVE CRITTER? ________________________________
DISK SIZE NEEDED: ______________________________________________
Basic Registration @ $50.00 $__________
(Includes source code for Microsoft C)
Non-US Shipping @ $5.00 __________
(Payments must be in US Dollars, US bank)
Remit to: Dana W. Cline
P.O. Box 260075
Lakewood, CO 80226
Dean McRory, for help in understanding critical
Mike Smedley, for advice and a really excellent
Jerry Pournelle, for continually harping about
the drawbacks of MS-DOS.
MS-DOS Programmers Reference, from Microsoft Press
MS_DOS Developer's Guide, from the Waite Group
Microsoft C 5.1 Manual, from Microsoft
MS-DOS Functions, from Microsoft Press