home *** CD-ROM | disk | FTP | other *** search
- /* x4buffer.c (c)Copyright Sequiter Software Inc., 1989. All rights reserved. */
-
- #include "d4base.h"
- #include "u4error.h"
- #include <stdlib.h>
- #include <string.h>
- #ifndef UNIX
- #include <io.h>
- #endif
-
- extern int v4cur_base ;
- extern BASE *v4base ;
-
-
- /* Returns the number of records read */
-
- int x4buffer( start_rec, buffer, buffer_len )
- long start_rec ;
- char *buffer ;
- unsigned int buffer_len ;
- {
- BASE *base_ptr ;
- char buffer1[34], buffer2[34] ;
- unsigned int num_bytes ;
- int num_recs ;
-
- if ( v4cur_base < 0 )
- {
- u4error( E_D_MISSING, (char *) 0 ) ;
- return( -1 ) ;
- }
-
- base_ptr = v4base + v4cur_base ;
- num_recs = buffer_len / base_ptr->buffer_len ;
-
- if ( num_recs <= 0 ) return 0 ;
- if ( start_rec <= 0 )
- start_rec = 1L ;
- if ( start_rec + num_recs -1 > d4reccount() )
- num_recs = (int) (d4reccount() - start_rec + 1) ;
- if ( num_recs <= 0 ) return 0 ;
- num_bytes = (unsigned int) base_ptr->buffer_len * (unsigned int) num_recs ;
-
- if ( d4lock( -1L, 1 ) < 0 ) return( -1) ;
-
- lseek( base_ptr->dos_file,
- base_ptr->header_len+ (start_rec-1)* base_ptr->buffer_len, 0) ;
- if ( read ( base_ptr->dos_file, buffer, num_bytes )
- != num_bytes )
- {
- ltoa( start_rec, buffer1, 10) ;
- ltoa( (long) num_recs, buffer2, 10 ) ;
- u4error( E_READ, base_ptr->name, "Start Record: ", buffer1,
- "Number of Records: ", buffer2, (char *) 0) ;
- return( -1) ;
- }
-
- return ( num_recs ) ;
- }
-
-
- void x4buffer_copy( offset_record, record_buffer )
- int offset_record ;
- char *record_buffer ;
- {
- int len ;
-
- if ( v4cur_base < 0 ) return ;
- len = v4base[v4cur_base].buffer_len ;
- memcpy( v4base[v4cur_base].buffer, record_buffer+ offset_record*len, len ) ;
- }
-