home *** CD-ROM | disk | FTP | other *** search
-
- /* i4go.c (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- Parameters
-
- Name Type Use
-
- index_ref int A reference to the index file.
- value_ptr char * A pointer to the key value.
- rec_num long A record number to search for.
-
-
- Function Return
-
- Type: int
- -1 - Error
- 0 - Successfully Located
- 1 - Key Value Located; Record Number not Located.
- (Positioned at key after 'value_ptr')
- 2 - Neither Key Value nor Record Number Located
- (Positioned at key after 'value_ptr')
- 3 - EOF (Just at End)
- */
-
- #include "p4misc.h"
- #include "d4all.h"
-
- #include <string.h>
-
- extern INDEX *v4index ;
-
-
- i4go( int index_ref, char *value_ptr, long rec_num )
- {
- INDEX *index_ptr ;
- int rc, len_compare ;
-
- index_ptr = v4index + index_ref ;
- len_compare = index_ptr->key_len ;
-
- switch( i4seek( index_ref, value_ptr ) )
- {
- case 1: /* Inexact */
- len_compare = (int) strlen( value_ptr ) ;
-
- case 0: /* Found */
-
- /* Go until either record number located or on after */
- do
- {
- /* Was the record located ? */
- if ( i4key(index_ref)->rec_num == rec_num )
- return( 0) ; /* Success */
-
- /* Is the record greater ? */
- if ( i4key(index_ref)->rec_num > rec_num )
- return 1 ; /* Success */
-
- if ( (rc = (int) i4skip( index_ref, 1L)) <= 0 ) break ;
- } while ( memcmp(i4key(index_ref)->value, value_ptr, (size_t) len_compare) == 0) ;
-
- if ( rc == -1 ) return( -1 ) ; /* Error Return */
- if ( rc == 0 ) return( 4 ) ; /* EOF but key Located */
-
- return( 1 ) ; /* Key Located, Record Not */
-
- case 2: /* On After */
- return( 2 ) ;
-
- case 3: /* EOF */
- return( 3 ) ;
- }
- return( -1 ) ;
- }
-
-
-