home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / CODE4-1.ZIP / SOURCE.ZIP / I4LOCK.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-14  |  1.5 KB  |  64 lines

  1.  
  2. /*  i4lock.c   (c)Copyright Sequiter Software Inc., 1987, 1988, 1989.  All rights reserved.
  3.  
  4.     Locks the while index file.
  5.  
  6.     Returns
  7.        0 -  Success
  8.       -1 -  Error
  9.       -2 -  Locked by Another Station
  10. */
  11.  
  12. #include "d4base.h"
  13. #include "u4error.h"
  14.  
  15. #ifndef UNIX  
  16.    #include <io.h>  
  17. #endif
  18.  
  19. extern  INDEX  *v4index ;
  20.  
  21.  
  22. int i4lock( index_ref, do_wait )
  23. int     index_ref, do_wait ;
  24. {
  25.    INDEX  *index_ptr ;
  26.    int     h_size, rc ;
  27.  
  28.    index_ptr =  v4index + index_ref ;
  29.    if ( index_ptr->lock )  return( 0) ;
  30.  
  31.    if ( u4lock( index_ptr->dos_file, LOCK_START, 1L, do_wait) == -2 ) 
  32.     return( -2 )  ;
  33.  
  34.    index_ptr->old_version =  index_ptr->version ;
  35.  
  36.    lseek( index_ptr->dos_file, (long) 0, 0) ;
  37.    #ifdef CLIPPER
  38.       h_size =  (int) ((char *)(v4index+1) - (char *)&v4index->sign) ;
  39.       rc =  read( index_ptr->dos_file, (char *)&index_ptr->sign, h_size ) ;
  40.    #else
  41.       h_size =  (int) ((char *)(v4index+1) - (char *)&v4index->root) ;
  42.       rc =  read( index_ptr->dos_file, (char *)&index_ptr->root, h_size ) ;
  43.    #endif
  44.    if ( rc < 0)
  45.    {
  46.       u4error( E_READ, index_ptr->name, (char *) 0) ;
  47.       return( -1) ;
  48.    }
  49.  
  50.    index_ptr->lock     =  -1 ;
  51.  
  52.    if ( index_ptr->old_version != index_ptr->version )
  53.    {
  54.       index_ptr->old_version =  index_ptr->version ;
  55.       #ifdef CLIPPER
  56.          index_ptr->virtual_eof =  0L ;
  57.       #endif
  58.       if ( i4free( index_ref ) < 0 )  return -1 ;
  59.    }
  60.    return(0);
  61. }
  62.  
  63.  
  64.