home *** CD-ROM | disk | FTP | other *** search
-
- /* (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- d4buf_write_pos()
- */
-
- #include "d4all.h"
- #include "u4error.h"
-
- #ifndef UNIX
- #include <io.h>
- #endif
-
- char H_PTR d4buf_write_pos( BASE *base_ptr, long rec_num )
- {
- int i_buf ;
- BASE_BUF *buf ;
-
- i_buf = (int) ((rec_num / base_ptr->rec_per_buf) % base_ptr->n_bufs) ;
- buf = base_ptr->bufs+ i_buf ;
-
- if ( rec_num < buf->start_rec || rec_num > buf->end_rec )
- {
- /* The record is not in the buffer. */
-
- if ( d4locked(-1L) )
- {
- if ( d4buf_read_pos( base_ptr, rec_num) == (char H_PTR) 0)
- return( (char H_PTR) 0 ) ;
- }
- else
- {
- /* Record Locked */
- if ( d4buf_flush( base_ptr, i_buf ) < 0 ) return( (char H_PTR) 0 );
-
- buf->start_rec = buf->end_rec = rec_num ;
- }
- }
-
- if ( ! buf->changed )
- {
- buf->changed = 1 ;
- base_ptr->change_list = h4add((char **) &base_ptr->bufs,
- base_ptr->change_list, i_buf, 0 ) ;
- }
-
- return( base_ptr->buf_ptr + i_buf*base_ptr->bytes_per_buf +
- (rec_num-buf->start_rec) * base_ptr->buffer_len ) ;
- }
-
-
-