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.