COPYRIGHT 1991, Object Systems, Inc.
Objective Systems, Inc.
14 Woodcrest Rd.
Boonton, NJ  07005

Author:
 Richard Doust            (201) 335-0691
 CompuServe               76130,3247

This group of files represent my improvements on Gary B. Weinfurther's C++ 
interface to the Paradox Engine Library.  I downloaded that file from 
CompuServe (pdxpp.h), and, in trying to use it in a real development 
environment, I found that it lacked some things.

The first change was in initializing the Paradox Library.  Gary's package 
didn't take care of it.  With my change, you never need concern yourself in 
your application code with the library initialization.  If you use any object 
derived from PXOBJ, the library will be initialized.

I added a class called DataPathTable which allows the application to assume 
nothing about the location of a Paradox table.  This class attempts to open 
any table by trying the current directory first.  If not found, the 
environment is searched for a string matching "PDXDATA".  This is a full path 
for Paradox Tables, e.g., d:\public\tables;d:\system\tables;c:\codes.  The 
class will open the table in the first directory it finds it in given this 
path.

The other class I created is derived from DataPathTable, it's called 
PublicTable.  The idea behind PublicTable, is that, in an event driven 
environment, such as a windowing environment (Zinc, Windows, etc.), there may 
be many circumstances where different "processes" may legitimately require 
access to the same table at the same time.  There may be no reason why they 
shouldn't have such access.  In a networked environment, Paradox allows 
multiple users to have access to the same table concurrently, but there's no 
provision for two modal dialog boxes within one application to access one 
table at the same time.  If you declare a PublicTable, other "processes" may 
access that same table.  This introduces possible problems because Paradox 
maintains a record pointer per table, so both processes will be using the 
same record pointer.  If any process depends on the record pointer, it must 
save it and restore it between processing messages.

