FastFile
--------
FastFile provides a way to create a very fast way to access large numbers
of files.

You use FFCREATE.EXE to create a single flat file.   Just run FFCREATE in
the directory that contains all of the files you wish to access.   A file
will be created at the root (RESULT.FF) that is the FastFile.  (you can 
specify a filename on the command line to override the default of RESULT.FF;
if you do so, make sure that the result file is NOT generated in the
current directory).

Once you have created your FastFile, you can use the FastFile routines to
access it:

BOOL FastFileInit( LPSTR fname, int max_handles ):
Call to initialize access to a FastFile.
    fname      : name of FastFile
    max_handles: maximum number of file handles you want to have open at the
                 same time.
    returns TRUE if succeeds, FALSE otherwise

void FastFileFini( void ):
Call when you are finished accessing your FastFile

HFASTFILE FastFileOpen( LPSTR name ):
Call to open an individual file in a FastFile (read-only access is supported)
    name: name if individual file
    returns a handle, or NULL if fail
    
BOOL FastFileClose( HFASTFILE hff ):
Call to close an individual file 
    hff: handle to an individual file
    returns TRUE if succeeded, FALSE otherwise
    
BOOL FastFileRead( HFASTFILE hff, LPVOID ptr, int size )
Call to read from an individual file
    hff:  handle to an individual file
    ptr:  buffer to copy data
    size: size of data to copy
    returns TRUE if succeeded, FALSE otherwise
    
BOOL FastFileSeek( HFASTFILE hff, int off, int type )
Call to seek to an offset in an individual file
    hff:  handle to an individual file
    off:  offset to seek to
    type: seek type: SEEK_SET (from start), SEEK_CUR (from current pos),
          or SEEK_END (from end)
    returns TRUE if succeeded, FALSE otherwise
    
long FastFileTell( HFASTFILE hff )
Call to get the current position in an individual file
    hff:  handle to an individual file
    returns current position if succeeded, -1 otherwise
