campo-sirio/cb/source/f4long.c

142 lines
3.3 KiB
C
Raw Normal View History

/* f4long.c (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
#include "d4all.h"
#ifndef S4UNIX
#ifdef __TURBOC__
#pragma hdrstop
#endif
#endif
#ifndef S4OFF_WRITE
void S4FUNCTION f4assignLong( FIELD4 *field, const long lValue )
{
CODE4 *c4 ;
#ifdef S4VBASIC
if ( c4parm_check( (void *)field, 3, E90516 ) )
return ;
#endif
#ifdef E4PARM_HIGH
if ( field == 0 )
{
error4( 0, e4parm_null, E90516 ) ;
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
c4 = field->data->codeBase ;
if ( error4code( c4 ) < 0 )
return ;
#ifndef S4SERVER
#ifndef S4OFF_ENFORCE_LOCK
if ( c4->lockEnforce && field->data->recNum > 0L )
if ( d4lockTest( field->data, field->data->recNum ) != 1 )
{
error4( c4, e4lock, E90516 ) ;
return ;
}
#endif
#endif
switch ( field->type )
{
case r4date:
date4assign( f4assignPtr( field ), lValue ) ;
break ;
#ifdef S4CLIENT_OR_FOX
case r4int:
f4assignInt( field, (int)lValue ) ;
break ;
case r4double:
f4assignDouble( field, (double)lValue ) ;
break ;
case r4memo:
case r4memoBin:
case r4gen:
if ( f4len( field ) == 4 )
*((long *)f4assignPtr( field )) = lValue ;
else
c4ltoa45( lValue, f4assignPtr( field ), field->len ) ;
break ;
#endif
default:
if ( field->dec == 0 )
c4ltoa45( lValue, f4assignPtr( field ), field->len ) ;
else
f4assignDouble( field, (double)lValue ) ;
break ;
}
}
#endif
long S4FUNCTION f4long( const FIELD4 *field )
{
#ifdef S4CLIENT_OR_FOX
const char *ptr ;
#endif
#ifdef S4VBASIC
if ( c4parm_check( (void *)field, 3, E90517 ) )
return 0L ;
#endif
#ifdef E4PARM_HIGH
if ( field == 0 )
{
error4( 0, e4parm_null, E90517 ) ;
return -1L ;
}
switch( field->type )
{
case r4log:
#ifdef S4CLIENT_OR_FOX
case r4system:
case r4dateTime:
#endif
error4( field->data->codeBase, e4parm, E81409 ) ;
return -1L ;
default:
break ;
}
#endif
switch( field->type )
{
case r4date:
return date4long( f4ptr( field ) ) ;
#ifdef S4CLIENT_OR_FOX
case r4memo:
case r4memoBin:
case r4gen:
if ( f4len( field ) == 4 )
return *((long *)f4ptr( field )) ;
break ;
case r4int:
return (long)(*((int *)f4ptr( field ))) ;
case r4double:
return (long)(*((double *)f4ptr( field ))) ;
case r4currency:
ptr = f4currency( field, 0 ) ;
return c4atol( ptr, strlen( ptr ) ) ;
#endif
default:
break ;
}
return c4atol( f4ptr( field ), field->len ) ;
}