A-Shell/FAX

A-Shell/FAX is an application programming interface (API) which enables applications running under A-Shell/Windows to send faxes via the Windows 2000 / XP Fax Service. While faxing has always been possible under A-Shell/Windows by the simple fact that most fax packages emulate a standard Windows printer, A-Shell/FAX allows the application to pass all of the necessary addressing information (fax number, to/from names, cover page info, etc.) directly to the Fax Service, eliminating the need for the user to respond to the dialog boxes which would otherwise pop up to request this information.

Note that A-Shell/FAX requires Windows 2000, XP or higher, although it can be made available to A-Shell/UNIX via ATE and the GDIPRT printing subroutine.

The mechanism for passing this information from the application to the Fax Service consists of a set of commands or directives that can be embedded at the start of the print file. The concept is identical to that used for embedding GDI directives for font selection, line drawing, image printing, etc. The actual set of directives overlaps that of the AlphaFAX package available under AMOS. That is to say, most (but not all) AlphaFAX commands are supported by A-Shell/FAX, yet A-Shell/FAX supports a number of additional commands designed to take advantage of features of the Windows 2000 Fax Service that do not exist in AlphaFAX.

We chose to target the Windows 2000 / XP Fax Service for the following reasons:

• We are not aware of any corresponding standardized fax API available under Windows 9x or NT. Many of the existing fax packages, like WinFax Pro, do offer a programming interface, but they typically involve the use of custom DLL or DDE calls, making it very difficult to support a single interface from the BASIC side.

• The documentation and API necessary to use the interface are provided in the standard Microsoft developer tool set, greatly simplifying our task of getting A-Shell to work with it and to keep up with its evolution.

• The technique of embedding logical fax commands within the print file (which are translated by the A-Shell printing interface) isolates the application fax interface from the details of the back-end interface to the fax server, thus allowing for the possibility of supporting other back-end fax services simply by adding additional translation routines to A-Shell. Although the logical commands we implemented were designed with the W2000 Fax Service in mind, they are fairly generic and would most likely work equally well with any fax server API. In fact, they could be easily adapted to a UNIX environment (since most UNIX fax software also relies on the technique of embedded commands in the print file.)