By Alan Hart, last updated 1998-09-30 (but needs an update still).
The purpose of this article is to outline the options open to you if you want to write a DOS program to control a fax modem, with particular reference to sending faxes. Any relevant information for Windows and OS/2 will also be included as soon as people send me it. This is not an exhaustive list of your options, but it does contain everything I've come across.
Disclaimer: This information does not come directly from reliable sources. While I have tried to ensure that this information is accurate and believe it to be so, I take no responsibility for any inaccuracies. I haven't tried most of the software listed below. I'm just trying to report what I've gleaned from other people.
If you can afford to use rather more upmarket equipment, you can buy a GammaFax or Brooktrout intelligent fax card for about $600. Both these brands are reputed to be of very good quality. An API/toolkit for the GammaFax series costs a further $500 or so; alternatively Stylus Innovation, Inc. have a Visual Basic custom control (VBX) called Visual Fax which provides high level support for both GammaFax and SatisFAXtion. ITI Software of Montreal have a nifty-looking CAS/Brooktrout fax toolkit called Multi-Fax which supports multiple CAS modems under Windows, DOS and extended DOS. Comet/FaxPro is a CAS toolkit for FoxPro, dBASE, Clipper and QuickSilver.
Another option that has recently come to my attention is Vidicode's Argus modem. Vidicode, it seems, sell fully programmable modems with built-in hard drives. The Argus, intended mainly for use with mainframes and minicomputers, can receive text files via its two serial and one parallel ports. The only format requirement is that the destination fax number is in the first line of the file, and a special escape string is available to flag end of page. The modem reads the first line, strips off the number, and faxes it out. The user can program the modem to merge the letter with a letterhead, signature or footer. Further information from sales@vidicode.com.
In any case, regardless which of these we are considering, if you need your software to work with ordinary modems, these solutions aren't any good for you.
The newest publication on the market seems to be "The Fax Modem Sourcebook", ISBN 0 471 95072 6, by Andrew Margolis, who also wrote the toolkit mentioned below, a copy of which is supplied with the book (non-commercial licence). The book covers T.4, T.30, TIFF/F, Class1/2/2.0, and other topics, and there is some extra information on the disk on topics of less universal interest such as BFT and ELM. It's published by John Wiley, 1995, costing around UKP24.95, or US$34.95.
Also available from the same site is faxdem.exe . This is a self-extracting archive of some demo EXE files written using the fax library; these would be sufficient in themselves for basic DOS command line faxing. Further information is available by e-mail from 76004.2611@compuserve.com or from info@tpower.com. The library costs about $220.
Delphi programmers might also want to consider MicroHelp's Fax Plus 1.1. This appears to be a library allowing programmers to send and receive faxes using a class 1, 2, or 2.0 fax modem from a document in ASCII text, .BMP, .PCX or .DCX format. It apparently costs US$249. Microhelp can be contacted at +1 800 922-3383, or by fax at +1 404 516-1099. For further information see Borland's Delphi Solutions (you will have to search the list of products somewhat).
Data Techniques' FaxMan is a VBX/DLL library for C, C++, Visual Basic and Delphi, with which you can add fax send/receive for "standard fax modems" to your applications. Pronexus VBFax is a sophisticated VBX which will control up to 10 fax modems at once.
Margolis & Co of London have also produced a fax toolkit. Like most of the other products listed here, I can't endorse this in any way, as I've never seen it, but I quote Andy Margolis (margolis@cix.compulink.co.uk) below as I think it is of considerable interest. One major advantage of Andrew's product is that you can have it to try out and play with very cheaply.
You should also know about my FAX Toolkit, which includes
routines for
1. Turning text files into fax files (TIFF Class F) with
options for 1-D and 2-D T.4 encoding or T.6 encoding,
both fine and normal resolution.
2. Sending and receiving faxes using either class 1, class
2 or class 2.0 fax modems. Fine and normal resolution
with 1-D and 2-D T.4 faxes supported if the modem can
handle it. Error correction also supported but only
on those class 1 modems that have high-speed HDLC the
capability. 2.0 support fairly untested,
3. Outputting received faxes to a variety of devices : as
well as IBM graphics screens, a range of printers are
supported, and also file conversion to uncompressed
TIFF bit images.
Full source code is provided (ANSI C : the code is tested
and developed on PCs, and the version provided includes
some machine dependent routines in assembler for direct
screen output and around eight routines for low-level i/o).
The source code is available on PC disk on a non-commercial
basis for only 30 UKP plus delivery (Visa and M/C credit
cards accepted) ; this gives a licence to use and play with
the code, but not to use it in any products available for
sale. Commercial licences by negotiation.
(I'm not sure about the netiquette of publicizing this via
Usenet, which is why I've not posted).
Andrew Margolis
MARGOLIS & CO
228 Alexandra Park Road,
Wood Green,
London N22 4BH, UK
Secondly, there's CommWorks by Pinnacle Publishing. I don't have an e-mail address for them, but their sales telephone number is +1 800 788-1900; fax +1 206 251-5057. They also have a BBS on +1 206-251-6218 (9600,N,8,1). On CompuServe, type GO PINNACLE.
The other FoxPro fax solution is SilverFox by SilverWare, Inc. It handles various forms of communications including X/Y/Z-Modem as well as a full range of fax functions. It's reputed to be a very solid product. SilverWare are on (voice) +1 214 247-0131 and their address is 3010 LBJ Freeway, #740, Dallas, TX 75234, USA.
Windows programmers might want to consider interfacing to a commercial fax package. I understand that WinFax PRO v4.0 supports DDE, and could presumably therefore be convinced to send faxes for you. Equisys' Zetafax is a PC LAN fax package. Users on the network can send and receive faxes straight from their PCs. One PC on the network needs to be set up as a fax server; connected to it are one or more fax modems or fax cards. Zetafax supports both DDE and a C API and appears to be suitable for both DOS and Windows.
Richard Shockey tells me that the industry is likely to move towards MAPI for faxing. Apparently in a Win95/NT 4.0 environment, you can use MAPI as follows:

Which means "MAPI (fax) enable your application and you can fax till you drop.", as Richard puts it. For more info, mail faxinfo@microsoft.com.
There appears to be only one public domain fax library currently available: PBFax, by John Pearson and Lance Edmonds, and it is written for PowerBASIC, which is (apparently) a very advanced DOS (compiled) programming language, featuring many of the best features of Pascal, C and Basic. PowerBASIC is very strong on comms and TSR programming, often requiring very little source code. The fax send code is for PowerBASIC 3.2 and supports class 2 and class 2.0 modems. Documentation is included. Version 10 will become shareware, with many new features. (version 8b is current; version 9 will not be released.)
OS/2 developers might like to get in touch with Mark Ahlstrom (72120.3404@compuserve.com) of the Keller Group. Wayne Fulton tells me they produce a powerful high-end fax SDK for OS/2 that supports CAS, Class 1/2, Brooktrout and Gammalink. Their details are:
voice phone +1 612 429 7273 fax +1 612 653 1987 BBS +1 612 653 0699
For further information you might like to check out the following:
This document was written by Alan Hart, who (although believing it to be accurate) takes no responsibility for its accuracy or otherwise. Thanks to Lance Edmonds, David Empson, Wayne Fulton, Benjoe Juliano, John B. O'Connell, Brett Macmillan, Andrew Margolis, George Pajari, Richard Shockey, and others for supplying me with information for this FAQ. If you'd like to tell me the page was useful, have any suggestions for missing links, or I haven't credited you, and you would like me to credit you, please e-mail me.
Alan