SYSTEM REQUIREMENTS

 o  Clipper 5.2.
 o  MS-DOS 3.1.
 o  Any MS-DOS network.
 o  NetLib and NOVLIB are optional, but synergistic.
 o  Compatible with Blinker 3, Exospace, and all third-party products.
 o  100% Clipper code.
 o  100% overlayable.

CONTROL MEMVARS

(NOTE: In the dMILL All-Networks Productivity Library for Clipper 5.2, these
memvars are controlled by DmSet(), an analog of Clipper's SET() function.  For
example, DmSet("BellDuration",5) sets the audible alarm to 5 bell characters
and returns the previous setting.)

 1. Bell.  Audible Alarm: If true, send DmSet("BellDuration") bell characters
    to a user's terminal when a requested resource is unavailable.
 2. BellDuration.  Audible Alarm: if DmSet("Bell") is true, send
    DmSet("BellDuration") bell characters to a user's terminal when a
    requested resource is unavailable.
 3. BellDurationForLockOwners.  If DmSet("BellForLockOwners") is true, send
    DmSet("BellDurationForLockOwners") bell characters at the beginning of a
    message to a lock owner's terminal when such a message is sent.
 4. BellForLockOwners.  Audible Alarm: If true, send
    DmSet("BellDurationForLockOwners") bell characters at the beginning of a
    message to a lock owner's terminal when such a message is sent.
 5. BoxColorBorder.  Color specification for borders of windows displayed by
    Kit routines.
 6. BoxColorInterior.  Specification of colors used for interiors of windows
    displayed by Kit routines.
 7. BoxError.  Returns true when a Kit windows routine found no violations of
    input requirements, else false.
 8. BoxMarginLeft.  Number of columns of left margin used in windows displayed
    by Kit routines.
 9. BoxMarginRight.  Number of columns of right margin used in windows
    displayed by Kit routines.
10. CheckOwnerDelay.  The number of seconds between repeated checks to
    discover the owner or owners of an unavailable resource.
11. ClosedSemaphoresCount.  The number of semaphores closed in the last call
    to one of DmSmClsA, DmSmClsD, or DmSmClsS.  0 before the first call to one
    of DmSmClsA, DmSmClsD, or DmSmClsS.
12. ColorDefault.  Specification of default colors used by Kit applications.
13. ColorMonitor.  Although Clipper can determine whether the user has a color
    monitor card, it cannot determine if a monochrome monitor is attached.
    Set to false when a monochrome monitor is attached to a color monitor.
14. HandCode.  If false, timeouts from denied resource requests cause the
    application to quit to MS-DOS with an ERRORLEVEL of 255.  If true, control
    returns from a Kit routine to its caller, where the programmer must have
    hand-coded the handling of the denied request.
15. MessageDirectory.  The Kit puts error and warning messages in the
    directory specified here, or the current directory if no directory is
    specified.
16. NetDelay.  The number of seconds the Kit will wait between requests for a
    denied resource.  Recommended value is 0.5, as in DmSet("NetDelay", 0.5).
17. NotifyLockersCount.  The maximum number of lock owners to notify while
    waiting for an unavailable resource.
18. OwnerWait.  The number of seconds the Kit will retry a resource request
    before checking the first time for the owner of a denied resource.
    Recommended value is 30, as in DmSet("OwnerWait", 30).
19. ResourceGranted.  Returns true when a requested resource is granted, else
    false.
20. ScreenMaximumColumn.  The maximum number used for a column specification;
    namely, the number of screen columns minus one.
21. ScreenMaximumRow.  The maximum number used for a row specification;
    namely, the number of screen rows minus one.
22. SemaphoreDbfName.  The name of the semaphore table, which can have an
    extension other than .DBF, but must have the .DBF file format.
23. SemaphoreHistory.  Set true to record all semaphore activity.  Otherwise,
    semaphore records are deleted as soon as the semaphore is closed and
    deleted records in the semaphore table are recycled.
24. SemaphoreTimeout.  The maximum number of seconds to wait for a semaphore
    request to be satisfied.  Set at a value which would definitely indicate a
    problem bad enough to justify terminating the application.
25. SemaphoreTrackDbfFiles.  Set true to open a semaphore whenever a database
    is opened.  When combined with semaphore historical recording, you can get
    an audit trail of the databases opened by an application used by a
    specified user.
26. SemaphoreTrackIndexFiles.  Set true to open a semaphore whenever a
    database index is opened.  When combined with semaphore historical
    recording, you can get an audit trail of the database indexes opened by an
    application used by a specified user.
27. Timeout.  The maximum number of seconds to wait for a denied resource.
    Control returns to DOS if DmSet("HandCode") is false, else control returns
    to the caller.
28. TraceAnimate.  If false, multiple-user trace information will stay
    onscreen until a keypress is entered, else until a keypress or
    DmSet("TraceSpeed") seconds pass.
29. TraceResourceRequests.  Set true to trace all resource requests.
30. TraceSpeed.  If DmSet("TraceAnimate") is true, this setting controls the
    maximum number of seconds that trace information is displayed.
31. TraceUseParsing.  If true, INDEX, ALIAS, and EXCLUSIVE clauses are traced
    as parsed by DA_USE or Dm_Use.
32. UserName.  This is the user name taken from NetName() or a DOS
    environmental variable according to DmSet("NetNameOK()").


RESOURCE CONTENTION HANDLING ROUTINES

(Note: The behavior of these routines is controlled by the settings Bell,
BellDuration, BoxColorBorder, BoxColorInterior, BoxMarginLeft, BoxMarginRight,
ColorDefault, ColorMonitor, HandCode, MessageDirectory, NetDelay,
ScreenMaximumColumn, ScreenMaximumRow, Timeout, TraceAnimate,
TraceResourceRequests, TraceSpeed, and TraceUseParsing.)

1.  DA_ADD.  Append a record to a shared or exclusive file.
2.  DA_Flock.  Request a lock on a shared or exclusive file.
3.  DA_Rlock.  Request a record lock on a shared or exclusive file.
4.  DA_USE.  Request the opening of a shared or exclusive file.  (E.g.,
    DA_USE("Accounts", .F.) to open Accounts.DBF in shared mode.)
5.  DmPack_DB.  Pack a shared or exclusive file.
6.  DmReindex.  Reindex a shared or exclusive file.
7.  Dm_Use.  One argument form of DA_USE.  (E.g., Dm_Use("Accounts SHARED") to
    open Accounts.DBF in shared mode.)
8.  DmZAP_DB.  Zap a shared or exclusive file.
9.  lDmAppBlk.  Function form of DA_ADD.
10. lDmFLock.  Function form of DA_FLock.
11. lDmRLock.  Function form of DA_RLock.
12. lDA_USE.  Function form of DA_USE.
13. lDmPack.  Function form of DmPack_Db.
14. lDmReindx.  Function form of DmReindex.
15. lDmZap.  Function form of DmZap_Db.
16. lDmUse.  Function form of Dm_Use.


SEMAPHORE SERVICE ROUTINES

1.  Basic locking functions to create and initialize semaphores (enter into
    semaphore table).
    a.  Function DmSmLock.  Try to create semaphore until success or timeout
        occurs.
    b.  Function DmSmLoc1.  Make one attempt to create semaphore.
2.  Basic unlocking functions to destroy semaphores (remove from semaphore
    table).
    a.  Function DmSmUnlk.  Destroy semaphore.
    b.  Procedure DmSmUse.  Close the database and semaphore associated with
        the current work area; substitute for the USE command when a semaphore
        is locked for the duration of each database USE (PUBLIC DmSmTrackL is
        .T.).
    c.  Procedure DmSmClsA.  Close all files, databases, and semaphores owned
        by the caller; substitute for the CLOSE ALL command when a semaphore
        is locked for the duration of each database USE.
    d.  Procedure DmSmClsD.  Close all databases and associated semaphores in
        all work areas; substitute for the CLOSE DATABASES command when a
        semaphore is locked for the duration of each database USE.
    e.  Procedure DmSmClsS.  Close all semaphores owned by the caller.
    f.  Function lDmSmClsA.  Function form of DmSmClsA.
    g.  Function lDmSmClsD.  Function form of DmSmClsD.
    h.  Function lDmSmClsS.  Function form of DmSmClsS.
    i.  Function lDmSmUse.  Function form of DmSmUse.
3.  Functions to change semaphore values.
    a.  Function DmSmSetV.  Set semaphore value.
    b.  Function DmSmTeS1.  Try once to test and set semaphore value.
    c.  Function DmSmTeSt.  Try to test and set semaphore value until success
        or timeout occurs.
    d.  Function DmSmIncr.  Increment semaphore value.
    e.  Function DmSmDecr.  Decrement semaphore value.
4.  Functions and procedures to retrieve semaphore information.
    a.  Function DmSmExis.  Semaphore exists?
    b.  Function DmSmGetV.  Get semaphore value.
    c.  Procedure DmSmOwn.  Owner of a semaphore.
    d.  Procedure DmSmGetF.  Test for semaphore in table and get semaphore
        value and owner.
5.  Modes of operation for semaphore service routines.
    a.  Procedure DmSmBat.  Batch groups of semaphore operations.
    b.  Procedure DmSmHist.  Enable or disable collection of historical
        information.
    c.  Procedure DmSmTrac.  Enable or disable semaphore tracking.
6.  Debugging aids.
    a.  Procedure DmSmList.  List semaphores to file, screen, or printer.
    b.  Procedure DmSmHist.  Enable or disable collection of historical
        information.
    c.  Procedure DmSmTrac.  Enable or disable semaphore tracking.
    d.  Function lDmSmList.  Function form of DmSmList.
7.  Database and index file tracking.
    a. DmDbf().  Return the file name of a .DBF file for the current or
       specified work area.
    b. DmDbfName().  Same as DmDbf().
    c. DmDbfName1().  Return a string containing the alias, name, and open
       mode of a database file.
    d. DmDbfName2.  Get the alias name, file name, and open mode of a
       database file.
    e. DmDbList.  List information for open or open and closed database and
       index files.
    f. DmNDX().  List information on open index files.
    g. DmRLList.  List the record identities of locked records in the current
       database.
    h. DmSmClsNT.  Close a user's nontracking semaphores.
    i. DmSmZap.  ZAP the semaphore table.
    j. lDmSmClsNT().  Close a user's nontracking semaphores.
    k. lDmSmZap().  ZAP the semaphore table.
8.  Record lock status reporting.
    a. DmRLList.  List the record identities of locked records in the current
       database.


WINDOW SERVICE ROUTINES

1.  Procedure DmWrdWrp.  (A) Calculate the last row on which the message would
    appear or (B) display word-wrapped text in a rectangle.
2.  Procedure DmBxMes.  Display word-wrapped text in a titled, double-ruled
    window.
3.  Procedure DmBxMesC.  Service of DmBxMes plus a prompt to continue on
    bottom border.
4.  Procedure DmBxMesW.  Service of DmBxMes plus the prompt to continue in
    bottom partition.
5.  Procedure DmBxMesH.  Service of DmBxMes plus ergonomics: hide window with
    "H" or move it with the arrow keys.
6.  Procedure DmResMes.  Service of DmBxMesH plus a countdown which is
    computed and displayed on the bottom border; used by the resource-
    contention-handling routines.

<END OF LIST>

