148 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* f4double.c (c)Copyright Sequiter Software Inc., 1988-1996.  All rights reserved. */
 | 
						|
 | 
						|
/* Returns the value of the corresponding field as a double.
 | 
						|
   Only defined for 'Numeric' fields and 'Character' fields
 | 
						|
   containing numeric data.
 | 
						|
*/
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
#ifndef S4UNIX
 | 
						|
   #ifdef __TURBOC__
 | 
						|
      #pragma hdrstop
 | 
						|
   #endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef S4OFF_WRITE
 | 
						|
void S4FUNCTION f4assignDouble( FIELD4 *field, const double dValue )
 | 
						|
{
 | 
						|
   #ifdef S4CLIENT_OR_FOX
 | 
						|
      char currencyBuffer[21] ;
 | 
						|
   #endif
 | 
						|
   #ifdef S4VBASIC
 | 
						|
      if ( c4parm_check ( field, 3, E90504 ) )
 | 
						|
         return ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   #ifdef E4PARM_HIGH
 | 
						|
      if ( field == 0 )
 | 
						|
      {
 | 
						|
         error4( 0, e4parm_null, E90504 ) ;
 | 
						|
         return ;
 | 
						|
      }
 | 
						|
      switch( field->type )
 | 
						|
      {
 | 
						|
         case r4log:
 | 
						|
         #ifdef S4CLIENT_OR_FOX
 | 
						|
            case r4system:
 | 
						|
            case r4dateTime:
 | 
						|
         #endif
 | 
						|
            error4( field->data->codeBase, e4parm, E81409 ) ;
 | 
						|
            return ;
 | 
						|
         default:
 | 
						|
            break ;
 | 
						|
      }
 | 
						|
   #endif
 | 
						|
 | 
						|
   if ( error4code( field->data->codeBase ) < 0 )
 | 
						|
      return ;
 | 
						|
 | 
						|
   #ifndef S4SERVER
 | 
						|
      #ifndef S4OFF_ENFORCE_LOCK
 | 
						|
         if ( field->data->codeBase->lockEnforce && field->data->recNum > 0L )
 | 
						|
            if ( d4lockTest( field->data, field->data->recNum ) != 1 )
 | 
						|
            {
 | 
						|
               error4( field->data->codeBase, e4lock, E90504 ) ;
 | 
						|
               return ;
 | 
						|
            }
 | 
						|
      #endif
 | 
						|
   #endif
 | 
						|
 | 
						|
   switch( field->type )
 | 
						|
   {
 | 
						|
      case r4date:
 | 
						|
         date4assign( f4assignPtr( field ), (long)dValue ) ;
 | 
						|
         break ;
 | 
						|
      #ifdef S4CLIENT_OR_FOX
 | 
						|
         case r4double:
 | 
						|
            *((double *)f4assignPtr( field )) = dValue ;
 | 
						|
            break ;
 | 
						|
         case r4int:
 | 
						|
            *((int *)f4assignPtr( field )) = (int)dValue ;
 | 
						|
            break ;
 | 
						|
         case r4currency:
 | 
						|
            c4dtoa45( dValue, currencyBuffer, 20, 4 ) ;
 | 
						|
            currencyBuffer[20] = 0 ;
 | 
						|
            f4assignCurrency( field, currencyBuffer ) ;
 | 
						|
            break ;
 | 
						|
      #endif
 | 
						|
      default:
 | 
						|
         c4dtoa45( dValue, f4assignPtr( field ), field->len, field->dec ) ;
 | 
						|
         break ;
 | 
						|
   }
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
double S4FUNCTION f4double( const FIELD4 *field )
 | 
						|
{
 | 
						|
   #ifdef S4CLIENT_OR_FOX
 | 
						|
      const char *ptr ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   #ifdef S4VBASIC
 | 
						|
      if ( c4parm_check( (void *)field, 3, E90505 ) )
 | 
						|
         return (double)0 ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   #ifdef E4PARM_HIGH
 | 
						|
      if ( field == 0 )
 | 
						|
      {
 | 
						|
         error4( 0, e4parm_null, E90505 ) ;
 | 
						|
         return -1.0 ;
 | 
						|
      }
 | 
						|
      switch( field->type )
 | 
						|
      {
 | 
						|
         case r4log:
 | 
						|
         #ifdef S4CLIENT_OR_FOX
 | 
						|
            case r4system:
 | 
						|
            case r4dateTime:
 | 
						|
         #endif
 | 
						|
            error4( field->data->codeBase, e4parm, E81409 ) ;
 | 
						|
            return (double)0 ;
 | 
						|
         default:
 | 
						|
            break ;
 | 
						|
      }
 | 
						|
   #endif
 | 
						|
 | 
						|
   switch( field->type )
 | 
						|
   {
 | 
						|
      case r4date:
 | 
						|
         return (double)date4long( f4ptr( field ) ) ;
 | 
						|
      #ifdef S4CLIENT_OR_FOX
 | 
						|
         case r4double:
 | 
						|
            return *((double *)f4ptr( field )) ;
 | 
						|
         case r4int:
 | 
						|
            return (double)(*((int *)f4ptr( field ))) ;
 | 
						|
         case r4currency:
 | 
						|
            ptr = f4currency( field, 4 ) ;
 | 
						|
            return c4atod( ptr, strlen( ptr ) ) ;
 | 
						|
      #endif
 | 
						|
   }
 | 
						|
 | 
						|
   /* Convert the field data into a 'double' */
 | 
						|
   return c4atod( f4ptr( field ), field->len ) ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION f4double2( const FIELD4 *field, double *result )
 | 
						|
{
 | 
						|
   #ifdef E4PARM_HIGH
 | 
						|
      if ( field == 0 )
 | 
						|
      {
 | 
						|
         error4( 0, e4parm_null, E90506 ) ;
 | 
						|
         return -1 ;
 | 
						|
      }
 | 
						|
   #endif
 | 
						|
 | 
						|
   *result = f4double( field ) ;
 | 
						|
   return 0 ;
 | 
						|
}
 |