LAST UPDATE: Sept 19, 1995

All examples have been built successfully with Motif 1.2.4 and
C++ 3.x on a Silicon Graphics IRIS Indy.

The sources are mostly organized by chapters, with each example being
placed in a directory that corresponds to the chapter in which it is
discussed. The exception is those C++ classes that are considerred
part of a library. There are two libraries.  The first is
libComponent.a, used by the first part of the book. This is a very
small library, and those classes are found in the ComponentLib
directory. The second, somewhat larger library is libMotifApp.a, which
is developed in the second part of the book.  This library lives in
the MotifApp directory.

If you have lots of disk space, just type "make" in this top-level
directory to build all examples. You can also type "make clobber" to remove
all binaries from subdirectories. If you have less disk space, just build
the libraries and build only those examples you are interested in.

The Makefiles have been kept very simple to allow you to modify them to
meet your needs. They make no pretense at being robust or portable. They
are not tested on various machines, other than the SGI workstation.

In addition to the sources to the examples in the book, you will find
an "Extras" subdirectory. This directory contains a few alternate
implementations of some examples in the book, and also contains some
written material that was cut from the final version of the book, but
which may be useful to some people. This material has not been updated
since the original edition of the book.

BUG FIX

The sources to the TicTacToe example include some minor changes to fix
a bug in the algorithm for selecting the computer's next move.

PORTABILITY NOTE

srand48/drand48 is apparently not available on all systems. A contributed
(untested) fix is to put these lines in the MoveGenerator class file:

    #include "stdlib.h"
    void srand48(long seed){srand((int)seed);}
    #define RAND_MAX 2147483647  // should not be needed
    double drand48(void){ return ((double)rand())/(double)RAND_MAX; }


