home *** CD-ROM | disk | FTP | other *** search
-
- /* (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- d4read.c
- */
-
- #include "p4misc.h"
- #include "d4all.h"
- #include "u4error.h"
-
- #ifndef UNIX
- #include <io.h>
- #endif
-
- extern BASE *v4base ;
- extern int v4cur_base ;
- extern int v4lock_wait ;
-
-
- int d4go_error( long rec_num )
- {
- char conv_buffer[34] ;
-
- c4ltoa( rec_num, conv_buffer, 10 ) ;
- conv_buffer[10] = '\000' ;
- u4error( E_READ, d4name(), "Record: ", conv_buffer, (char *) 0) ;
- return -1 ;
- }
-
-
- int v4lock_code = 1 ;
-
- int d4lock_code( int lock_code )
- {
- int old_code ;
-
- old_code = v4lock_code ;
- if ( lock_code >= -1 && lock_code <= 2)
- v4lock_code = lock_code ;
-
- return old_code ;
- }
-
-
- int d4read( long rec_num )
- {
- BASE *base_ptr ;
- int rc ;
-
- base_ptr = v4base + v4cur_base ;
-
- #ifndef SMALL
- if ( ! d4locked( rec_num ) )
- /* Make sure index files are unlocked before locking a record. */
- i4unlock( -1) ;
- #endif
-
- switch( v4lock_code )
- {
- case 1:
- rc = d4lock( rec_num, v4lock_wait) ;
- break ;
-
- case -1:
- rc = d4lock( -1L, v4lock_wait ) ;
- break ;
-
- default:
- rc = 0 ;
- }
- if ( rc < 0 ) return rc ;
-
- base_ptr->rec_num = rec_num ;
-
- #ifndef SMALL
- if ( base_ptr->buf_status > 1 )
- {
- char H_PTR ptr ;
-
- if ((ptr = d4buf_read_pos(base_ptr, rec_num)) == (char H_PTR) 0) return -1;
-
- /* The record is now in the buffer */
- u4huge_cpy( (void H_PTR) base_ptr->buffer, ptr,
- (long) base_ptr->buffer_len ) ;
- }
- else
- #endif
- {
- if ( d4lseek(rec_num) < 0 ) return -1 ;
- if ( read ( base_ptr->file_hand, base_ptr->buffer, base_ptr->buffer_len)
- != base_ptr->buffer_len )
- return( d4go_error(rec_num) ) ;
- }
-
- return( 0 ) ;
- }
-
-