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 / D4ZAP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-14  |  1.6 KB  |  67 lines

  1.  
  2. /*  d4zap.c   (c) Copyright Sequiter Software Inc., 1987, 1988, 1989.  All rights reserved.
  3.  
  4. */
  5.  
  6. #include "d4base.h"
  7. #include "u4error.h"
  8.  
  9. #ifndef UNIX
  10.    #include <fcntl.h>
  11.    #include <io.h>
  12. #endif
  13.  
  14. extern  INDEX  *v4index ;
  15.  
  16. extern  int  d4adjust( BASE *, long ) ;
  17.  
  18. int d4zap( start_rec, end_rec )
  19. long  start_rec, end_rec ;
  20. {
  21.    int    rc ;
  22.    long   i_rec, base_size ;
  23.    long   from_address, difference ;
  24.    BASE  *base_ptr ;
  25.  
  26.    base_ptr =  d4ptr() ;
  27.    if ( base_ptr == (BASE *) 0 )  return( -1 ) ;
  28.  
  29.    d4lock( -1L, 1 ) ;  /* Lock Whole File */
  30.    base_size =  d4reccount() ;
  31.  
  32.    if ( end_rec >  base_size )
  33.     end_rec =  base_size ;
  34.    if ( start_rec < 1 )
  35.     start_rec = 1 ;
  36.  
  37.    if ( start_rec <= end_rec )
  38.    {
  39.       from_address =  base_ptr->header_len +  end_rec *  base_ptr->buffer_len ;
  40.       difference   =  (end_rec+1 - start_rec) * base_ptr->buffer_len ;
  41.  
  42.       for ( i_rec = end_rec+1; i_rec <= base_size; i_rec++)
  43.       {
  44.      lseek( base_ptr->dos_file, from_address, 0) ;
  45.      rc = read( base_ptr->dos_file, base_ptr->buffer, base_ptr->buffer_len ) ;
  46.      if (rc != base_ptr->buffer_len )
  47.      {
  48.         u4error( E_READ, base_ptr->name, (char *) 0 ) ;
  49.         return( -1 ) ;
  50.      }
  51.  
  52.      lseek( base_ptr->dos_file, from_address-difference, 0) ;
  53.      rc = write(base_ptr->dos_file, base_ptr->buffer, base_ptr->buffer_len ) ;
  54.      if (rc != base_ptr->buffer_len )
  55.      {
  56.         u4error( E_READ, base_ptr->name, (char *) 0 ) ;
  57.         return( -1 ) ;
  58.      }
  59.  
  60.      from_address += base_ptr->buffer_len ;
  61.       }
  62.       base_size -= end_rec - start_rec+1 ;
  63.    }
  64.  
  65.    return ( d4adjust(base_ptr, base_size) ) ;
  66. }
  67.