----------------------------------------------------------------------------
PROJECT:                  USER v1.0 - 04/24/93

FILENAME:                 USER.TXT     
Last Date:                April 24, 1993
AUTHOR:                   Daniel Ambrose * CIS 71062,523

COMPANY:                  Ambrose & Muckerman
                          1386 South Fifth Street
                          St. Charles, MO 63301
                          Tel 314 946-6222
                          Fax 314 946-8717
----------------------------------------------------------------------------

1     DESCRIPTION
      User is a Turbo Vision and Paradox Engine User Interface Demo
      program.  User is a true multi-user example program that teaches
      how to integrate the Paradox engine with Turbo Vision.

2     COPYRIGHT NOTICE
      You may use this material freely and, hopefully, post any
      comments/corrections/enhancements to me at the above address. 
      If you DO modify or enhance any of this code, please send any such
      changes to me for incorporation into a future version.  Any such
      enhancements will be DONATED, without expectation of
      compensation or incorporation into future versions.  


3     LIST OF ALL OTHER FILES
      
      DEBUG    CPP     1216  4-24-93  3:32p
      DEBUG    H        862  4-24-93  3:32p
      EVENTCMD H        158  4-24-93  3:32p
      LISTVIEW CPP     1685  4-24-93  3:32p
      LISTVIEW H        360  4-24-93  3:32p
      PX       H        749  4-24-93  3:32p
      PX1      CPP     3628  4-24-93  3:32p
      TDE      CPP    27936  4-24-93  3:32p
      TDE      H      15046  4-24-93  3:32p
      TDECLUST CPP     8329  4-24-93  3:32p
      TDEDATE  CPP     6639  4-24-93  3:32p
      TDEFLAGS H       4224  4-24-93  3:32p
      TDENUMS  CPP     4673  4-24-93  3:32p
      TDEPHONE CPP     6315  4-24-93  3:32p
      TTYWIN   CPP     1108  4-24-93  3:32p
      TTYWIN   H        533  4-24-93  3:32p
      USER     CPP     5821  4-24-93  3:32p
      USER     DSK       66  4-24-93  3:33p
      USER     PRJ    11025  4-24-93  3:32p
      USER1    CPP    16510  4-24-93  3:32p
      USER1    H       1614  4-24-93  3:32p



4     VIRTUAL LIST-VIEWER
      
      4.1    User includes a derived TListViewer view which teaches the
             concept of a "virtual" view into a database.  For more than
             65535 records all that is needed is to modify TListViewer from
             ints to longs.  In the past, I did try to upload the described
             TListViewer (long int) modification but it was rejected by a
             Borland SYSOP because it contained Borland modified source
             code.  So, this demo uses the stock TListViewer.  

      4.2    If your concerned about the 65535 record limitation it is
             important that you realize how very easy it is to over come
             the 65535 limitation.  All that is required is for one to modify
             TListViewer and TScrollBar from short integers to long
             integers. This modification should only take an hour or two if
             you've never done it before.  WARNING: Watch out for the
             min() and max() macros which take short integer arguments. 
             Since they are macros they are NOT TYPE CHECKED so you
             WILL NOT get a compiler error and will probably pull your hair
             out trouble shooting.  Don't ask me if I made this mistake or
             how long it took me to figure it out!

5     REFRESH
      Yes, this demo does use the Paradox refresh system call to refresh
      the data in real time.  Thus, you can run multiple copies and watch
      other persons modify the data via User or Paradox Interactive and
      you will see the data refresh in real time from User. How is refresh
      done ?  User over rides TProgram::idle() and once a second,
      function User->idle() sends a Broadcast message cmRefresh.  The
      derived TListViewer handleEvent function sees this event and causes
      a call to PXNetRefresh and then drawView.

6     MULTI USER RECORD LOCKING
      Yes this demo does lock the record when you are editing or waiting
      for delete confirmation.  Try it!  Create a record and then edit it. 
      Now, from another workstation run a 2nd copy of User.  Try to edit
      the same record.  You can't because the record locking is used.

7     GETTING STARTED

      7.1    From the BC++ IDE you need to configure the user project
             (USER.PRJ) include and library directories.  I use a different
             directory structure then that of the Borland default.

      7.2    User was compile and tested with Paradox Engine 3.01.  Ver
             3.01 was released just a few weeks ago.  I don't know if User
             works with Paradox engine versions prior to 3.01!

      7.3    Be sure to compile and/or include PXMSG.CPP in the User
             project file.  User module PX1.CPP makes a call to Paradox
             engine function PXOopErrMsg(int errCode) located in module
             PXMSG.CPP  (default \PXENG30\C\SOURCE\PXMSG.CPP)

      7.4    User includes portions from TDE.ZIP from BCPPDOS LIB 11.
             TDD.ZIP is a Turbo Vision field validation user input library
             uploaded by Jeff Penrose, CIS 71043,3727.  For an original
             copy of TDE.ZIP search the BCPPDOS Turbo Vision library.

      7.5    PROBLEMS WITH COMPILATION
             If you have any problems compiling User than feel free to ask
             me any questions via Email - Dan Ambrose - 71062,513

8     PARADOX TABLE
      At successful Paradox engine initialization User will attempt to create
      a table called USER.  You can run both User and Paradox
      interactive simultaneously to examine the data in real time.

9     COMMAND LINE ARGUMENTS
      A program statup from the DOS command line User does check for
      3 different command line arguments.  They are:

      DEBUG        Turns on debugging; this inserts a TTY window and
                   causes various trace messages to appear.

      NET=         Initializes the Paradox engine for network operation
                   and sets the path of the directory containing the
                   Paradox network control file.
                   Example:      NET=F:\PDOXNET

      WORK=        Sets the path of the directory where User will create
                   and use the paradox table User.db
                   Example:      WORK=F:\USER

10    SINGLE USER MODE
      If you run USER on a workstation without network capability then do
      not specify the -NET command line switch.  If you do not use the
      command line option '-NET' then User will start the Paradox engine
      in Non-network mode.  Otherwise, if you do use the -NET option
      then User will expect a network to be up, running and accessible.

      
11    HAVE FUN
      I hope you like this demo.  I also hope you learn from it.  Please let
      me know what you think ?  For questions, comments, tips and
      suggestions please don't hesitate to contact me.


      Best regards,       Dan Ambrose * CIS 71062,523