home *** CD-ROM | disk | FTP | other *** search
-
- /* d4zap.c (c) Copyright Sequiter Software Inc., 1987, 1988, 1989. All rights reserved.
-
- */
-
- #include "d4base.h"
- #include "u4error.h"
-
- #ifndef UNIX
- #include <fcntl.h>
- #include <io.h>
- #endif
-
- extern INDEX *v4index ;
-
- extern int d4adjust( BASE *, long ) ;
-
- int d4zap( start_rec, end_rec )
- long start_rec, end_rec ;
- {
- int rc ;
- long i_rec, base_size ;
- long from_address, difference ;
- BASE *base_ptr ;
-
- base_ptr = d4ptr() ;
- if ( base_ptr == (BASE *) 0 ) return( -1 ) ;
-
- d4lock( -1L, 1 ) ; /* Lock Whole File */
- base_size = d4reccount() ;
-
- if ( end_rec > base_size )
- end_rec = base_size ;
- if ( start_rec < 1 )
- start_rec = 1 ;
-
- if ( start_rec <= end_rec )
- {
- from_address = base_ptr->header_len + end_rec * base_ptr->buffer_len ;
- difference = (end_rec+1 - start_rec) * base_ptr->buffer_len ;
-
- for ( i_rec = end_rec+1; i_rec <= base_size; i_rec++)
- {
- lseek( base_ptr->dos_file, from_address, 0) ;
- rc = read( base_ptr->dos_file, base_ptr->buffer, base_ptr->buffer_len ) ;
- if (rc != base_ptr->buffer_len )
- {
- u4error( E_READ, base_ptr->name, (char *) 0 ) ;
- return( -1 ) ;
- }
-
- lseek( base_ptr->dos_file, from_address-difference, 0) ;
- rc = write(base_ptr->dos_file, base_ptr->buffer, base_ptr->buffer_len ) ;
- if (rc != base_ptr->buffer_len )
- {
- u4error( E_READ, base_ptr->name, (char *) 0 ) ;
- return( -1 ) ;
- }
-
- from_address += base_ptr->buffer_len ;
- }
- base_size -= end_rec - start_rec+1 ;
- }
-
- return ( d4adjust(base_ptr, base_size) ) ;
- }