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

  1. /*  x4buffer.c   (c)Copyright Sequiter Software Inc., 1989.  All rights reserved.  */
  2.  
  3. #include "d4base.h"
  4. #include "u4error.h"
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #ifndef UNIX
  8.    #include <io.h>
  9. #endif
  10.  
  11. extern int    v4cur_base ;
  12. extern BASE  *v4base ;
  13.  
  14.  
  15. /* Returns the number of records read */
  16.  
  17. int  x4buffer( start_rec, buffer, buffer_len )
  18. long  start_rec ;
  19. char *buffer ;
  20. unsigned int   buffer_len ;
  21. {
  22.    BASE *base_ptr   ;
  23.    char  buffer1[34], buffer2[34] ;
  24.    unsigned int  num_bytes ;
  25.    int   num_recs ;
  26.  
  27.    if ( v4cur_base < 0 )
  28.    {
  29.       u4error( E_D_MISSING, (char *) 0 ) ;
  30.       return( -1 ) ;
  31.    }
  32.  
  33.    base_ptr =  v4base +  v4cur_base ;
  34.    num_recs =  buffer_len / base_ptr->buffer_len ;
  35.  
  36.    if ( num_recs <= 0 )  return 0 ;
  37.    if ( start_rec <= 0 )  
  38.       start_rec =  1L ;
  39.    if ( start_rec + num_recs -1  > d4reccount() )
  40.       num_recs =  (int) (d4reccount() - start_rec + 1) ;
  41.    if ( num_recs <= 0 )   return 0 ;
  42.    num_bytes =  (unsigned int) base_ptr->buffer_len * (unsigned int) num_recs ;
  43.  
  44.    if ( d4lock( -1L, 1 ) < 0 )  return( -1) ;
  45.  
  46.    lseek( base_ptr->dos_file,
  47.       base_ptr->header_len+ (start_rec-1)* base_ptr->buffer_len, 0) ;
  48.    if ( read ( base_ptr->dos_file, buffer, num_bytes )
  49.     !=  num_bytes )
  50.    {
  51.       ltoa( start_rec, buffer1, 10) ;
  52.       ltoa( (long) num_recs, buffer2, 10 ) ;
  53.       u4error( E_READ, base_ptr->name, "Start Record: ", buffer1,
  54.                   "Number of Records: ", buffer2, (char *) 0) ;
  55.       return( -1) ;
  56.    }
  57.  
  58.    return ( num_recs ) ;
  59. }
  60.  
  61.  
  62. void  x4buffer_copy( offset_record, record_buffer )
  63. int   offset_record ;
  64. char *record_buffer ;
  65. {
  66.    int  len ;
  67.  
  68.    if ( v4cur_base < 0 )   return ;
  69.    len =  v4base[v4cur_base].buffer_len ;
  70.    memcpy( v4base[v4cur_base].buffer, record_buffer+ offset_record*len, len ) ;
  71. }
  72.  
  73.