home *** CD-ROM | disk | FTP | other *** search
-
- /* (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- f4replace.c
- */
-
- #include "d4base.h"
- #include "p4misc.h"
- #include <string.h>
-
- extern BASE *v4base ;
-
- /* f4replace
-
- Assigns a value to a field.
- */
-
- int f4replace( long field_ref, void *ptr )
- {
- int width, len ;
- double doub_val ;
- char *f_ptr, *static_ptr, f_type ;
-
- if ( ((char *) ptr) == ((char *) 0) ) return( -4 ) ;
-
- width = f4width( field_ref ) ;
- f_ptr = f4ptr( field_ref ) ;
-
- f_type = f4type( field_ref ) ;
-
- if ( f_type != 'N' && f_type != 'F' ) {
- len = (int) strlen( (char *) ptr ) ;
- if ( len > width ) len = width ;
- }
-
- switch( f_type )
- {
- case 'C':
- memset( f_ptr, (int) ' ', (size_t) width ) ;
- memcpy( f_ptr, (char *) ptr, (size_t) len ) ;
- break ;
-
- case 'D':
- memset( f_ptr, (int) ' ', (size_t) width ) ;
- if ( len != 8 ) return( -2 ) ; /* Illegal Date */
- if (c4dt_julian((char *) ptr, &doub_val) < 0) return( -2 ) ;
- memcpy( f_ptr, (char *) ptr, 8 ) ;
- break ;
-
- case 'N':
- case 'F':
- static_ptr = c4dtoa( *((double*) ptr), width, f4decimals(field_ref) ) ;
- memcpy( f_ptr, static_ptr, (size_t) width ) ;
- if ( *f_ptr == '*' ) return( -3 ) ;
- break ;
-
- case 'L':
- if ( *((int *)ptr) )
- f_ptr[0] = 'Y' ;
- else
- f_ptr[0] = 'N' ;
- break ;
-
- default:
- return( -5 ) ;
- }
- return( 0 ) ;
- }
-
-
-