which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			133 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* d4positi.c   (c)Copyright Sequiter Software Inc., 1990-1994.  All rights reserved. */
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
#ifndef S4UNIX
 | 
						|
#ifdef __TURBOC__
 | 
						|
#pragma hdrstop
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
double S4FUNCTION d4position( DATA4 *data )
 | 
						|
{
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  TAG4 *tag_on ;
 | 
						|
#endif
 | 
						|
  long count ;
 | 
						|
#ifndef S4FOX
 | 
						|
  int rc, len ;
 | 
						|
  char *result ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4POS ) )
 | 
						|
    return -1.0 ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data == 0 )
 | 
						|
#ifdef S4DEBUG
 | 
						|
    e4severe( e4parm, E4_D4POS ) ;
 | 
						|
#else
 | 
						|
  return -1.0 ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if( data->code_base->error_code < 0 )
 | 
						|
    return -1.0 ;
 | 
						|
 | 
						|
  if ( d4eof( data ) )
 | 
						|
    return 1.1 ;
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  tag_on = d4tag_selected( data ) ;
 | 
						|
  if ( tag_on == 0 || data->rec_num <= 0L )
 | 
						|
  {
 | 
						|
#endif
 | 
						|
    count = d4reccount( data ) ;
 | 
						|
    if ( count < 0 )
 | 
						|
      return -1.0 ;
 | 
						|
    if ( count == 0 || data->rec_num <= 0L )
 | 
						|
      return 0.0 ;
 | 
						|
 | 
						|
    return (double)( data->rec_num - 1 ) / ( count - (count != 1 ) ) ;
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
#ifndef S4FOX
 | 
						|
    len = t4expr_key( tag_on, &result ) ;
 | 
						|
    if ( len < 0 )
 | 
						|
      return -1.0 ;
 | 
						|
    t4version_check( tag_on, 0, 0 ) ;
 | 
						|
    rc = t4seek( tag_on, result, len ) ;
 | 
						|
    if ( rc != 0  && rc != r4eof && rc != r4after )
 | 
						|
      return -1.0 ;
 | 
						|
#endif
 | 
						|
    return t4position( tag_on ) ;
 | 
						|
  }
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4position2( DATA4 *data, double *result )
 | 
						|
{
 | 
						|
  *result = d4position( data ) ;
 | 
						|
  if ( *result < 0.0 )
 | 
						|
    return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4position_set( DATA4 *data, double per )
 | 
						|
{
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  TAG4 *tag_on ;
 | 
						|
#endif
 | 
						|
  long new_rec, count ;
 | 
						|
  int rc ;
 | 
						|
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4POS_SET ) )
 | 
						|
    return -1 ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data == 0 )
 | 
						|
#ifdef S4DEBUG
 | 
						|
    e4severe( e4parm, E4_D4POS_SET ) ;
 | 
						|
#else
 | 
						|
  return -1 ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  if ( per > 1.0 )
 | 
						|
    return d4go_eof( data ) ;
 | 
						|
  if ( per <= 0 )
 | 
						|
    return d4top( data ) ;
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  tag_on = d4tag_selected( data ) ;
 | 
						|
  if ( tag_on == 0 )
 | 
						|
  {
 | 
						|
#endif
 | 
						|
    count = d4reccount( data ) ;
 | 
						|
    if ( count <= 0L )
 | 
						|
      return d4go_eof( data ) ;
 | 
						|
 | 
						|
    new_rec = (long)( per * ( (double)count - 1 ) + 1.5 ) ;
 | 
						|
    if ( new_rec > count )
 | 
						|
      new_rec = count ;
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    rc = t4position_set( tag_on, per ) ;
 | 
						|
    if ( rc )
 | 
						|
      return rc ;
 | 
						|
    if ( rc == r4eof )
 | 
						|
      return d4go_eof( data ) ;
 | 
						|
 | 
						|
    new_rec = t4recno( tag_on ) ;
 | 
						|
  }
 | 
						|
#endif
 | 
						|
 | 
						|
  return d4go( data, new_rec ) ;
 | 
						|
}
 |