
                       HWX Browser Project

                               by

                            Marv Luse
              President, Autumn Hill Software, Inc.

    Autumn Hill Software's version of HWX Browser was written using two
of our own products:  the Menuet/CPP GUI toolkit and the Baby Driver
Printer Interface Library.  The application was developed in C++ using
version 3.0 of Borland's compiler, and runs on top of Flash Tek's Flash
Graphics library.

    As was probably true for most of the participants in this project,
we were faced with severe time constraints, which affected both the
design and the scope of the application.  We made the following
simplifying assumptions:  (1) the program was written primarily for VGA
mode 12h (640x480x16-color) or larger displays; (2) the program assumes
the presence of a mouse; and (3) many useful bells and whistles were
omitted.  The actual time commitment turned out to be approximately 1
man-week.

    On first looking at the project spec and the files provided by DDJ,
we decided to design our Browser so that HWX files did not need to be
loaded physically into memory.  We wanted the application to be able to
handle any size file without the need for EMS/XMS or protected mode
support-- in short, plain old DOS real mode.  To this end we designed an
addressing table scheme that allows individual character instances to be
quickly located and loaded.  In practice this works quite well, and
there is no perceptible performance degradation on a typical low-end 386
system.

    Because we used C++, and because we elected to do away with
in-memory data, we designed a C++ class hierarchy to handle the actual
HWX file interface.  This actually simplifies certain aspects of the
design relative to a C-only approach, and is definitely the way to go.
Details of the HWX interface layer can be seen by inspecting listing 1
(HWX.HPP) and listing 2 (HWX.CPP).  The following class objects were
implemented:

     (1) A character-access node (class HwxCharAccessEntry).
     (2) A character-access table (class HwxCharacterAccessTable).
     (3) An individual stroke (class HwxStroke).
     (4) An individual character definition (class HwxChar).
     (5) All instances of a given character (class HwxCharSet).
     (6) All characters of a given instance (class HwxAlphabet).

Once implemented, most of these objects are created by constructor
calls generated by declaration statements.  The elegance and simplicity
of this approach is quite compelling.

    As noted above, a print capability was added to the application
using our Baby Driver Printer Interface product.  Again, because of time
constraints, this was kept fairly simple.  Its capabilities can be seen
by running the application and clicking on the Print button when viewing
a character, alphabet, or sample string.  The driver table included with
the program is actually a reduced subset of the product's master table,
but still provides access to several hundred printers.  Some of the more
obscure models were deleted to reduce the table size.

    It should be noted to developers planning to write pencentric
applications that Menuet/CPP provides pen extensions and explicit
support for Communication Intelligence Corporation's PenDOSTM
environment.  None of this capability was used in this particular
project, however.
