home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a009 / 6.ddi / SAMPLE.LIF / LOCKS.PRG < prev    next >
Encoding:
Text File  |  1991-04-14  |  2.3 KB  |  101 lines

  1. /***
  2. *
  3. *  Locks.prg
  4. *  Sample network functions to supplant USE, FLOCK(), RLOCK() and
  5. *  APPEND BLANK.
  6. *
  7. *  Copyright, Nantucket Corporation, 1989, 1990
  8. *
  9. *  Compile as follows:
  10. *     
  11. *      C>CLIPPER Locks /N /W /A /M
  12. */
  13.  
  14.  
  15. /***
  16. *  AddRec( <nWaitSeconds> ) --> lSuccess
  17. *  Attempt to APPEND BLANK with optional retry
  18. */
  19. FUNCTION AddRec( nWaitSeconds )
  20.    LOCAL lForever
  21.    APPEND BLANK
  22.    IF .NOT. NETERR()
  23.       RETURN (.T.)
  24.    ENDIF
  25.    lForever = (nWaitSeconds = 0)
  26.    DO WHILE (lForever .OR. nWaitSeconds > 0)
  27.       APPEND BLANK
  28.       IF .NOT. NETERR()
  29.          RETURN .T.
  30.       ENDIF
  31.       INKEY(.5)         // Wait 1/2 second
  32.       nWaitSeconds  = nWaitSeconds  - .5
  33.    ENDDO
  34.    RETURN (.F.)         // Not locked
  35.  
  36.  
  37.  
  38. /***
  39. *  FilLock( <nWaitSeconds> ) --> lSuccess
  40. *  Attempt to FLOCK() with optional retry
  41. */
  42. FUNCTION FilLock( nSeconds )
  43.    LOCAL lForever
  44.    IF FLOCK()
  45.       RETURN (.T.)      // Locked
  46.    ENDIF
  47.    lForever = (nSeconds = 0)
  48.    DO WHILE (lForever .OR. nSeconds > 0)
  49.       INKEY(.5)         // Wait 1/2 second
  50.       nSeconds = nSeconds - .5
  51.       IF FLOCK()
  52.          RETURN (.T.)   // Locked
  53.       ENDIF
  54.    ENDDO
  55.    RETURN (.F.)         // Not locked
  56.  
  57.  
  58.  
  59. /***
  60. *  NetUse( <cDatabase>, <lOpenMode>, <nWaitSeconds> ) --> lSuccess
  61. *  Attempt to USE a database file with optional retry
  62. */
  63. FUNCTION NetUse( cDatabase, lOpenMode, nSeconds )
  64.    LOCAL lForever
  65.    lForever = (nSeconds = 0)
  66.    DO WHILE (lForever .OR. nSeconds > 0)
  67.      IF lOpenMode       
  68.          USE (cDatabase) EXCLUSIVE  
  69.      ELSE
  70.          USE (cDatabase) SHARED // Shared
  71.      ENDIF
  72.      IF .NOT. NETERR()          // USE succeeds
  73.         RETURN (.T.)
  74.       ENDIF
  75.       INKEY(1)                 // Wait 1 second
  76.       nSeconds = nSeconds - 1
  77.    ENDDO
  78.    RETURN (.F.)                // USE fails
  79.  
  80.  
  81.  
  82. /***
  83. *  RecLock( <nWaitSeconds> ) --> lSuccess
  84. *  Attempt to RLOCK() with optional retry
  85. */
  86. FUNCTION RecLock( nSeconds )
  87.    LOCAL lForever
  88.    IF RLOCK()
  89.       RETURN (.T.)        // Locked
  90.    ENDIF
  91.    lForever = (nSeconds = 0)
  92.    DO WHILE (lForever .OR. nSeconds > 0)
  93.       IF RLOCK()
  94.          RETURN (.T.)     // Locked
  95.       ENDIF
  96.       INKEY(.5)           // Wait 1/2 second
  97.       nSeconds = nSeconds - .5
  98.    ENDDO
  99.    RETURN (.F.)           // Not locked
  100.  
  101.