campo-sirio/cb/source/f4info_p.cpp
alex af15e0698b Codebase
git-svn-id: svn://10.65.10.50/trunk@4679 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-16 13:01:08 +00:00

122 lines
2.4 KiB
C++
Executable File

/* f4info_p.cpp/cxx (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
#include "d4all.hpp"
#ifdef __TURBOC__
#pragma hdrstop
#endif /* __TUROBC__ */
Field4info::Field4info( Code4 &code )
{
codeBase = &code ;
size = 0 ;
length = 0 ;
field = NULL ;
}
Field4info::Field4info( Data4 d )
{
size = 0 ;
length = 0 ;
field = NULL ;
codeBase = (Code4 *) d.data->codeBase ;
add( d ) ;
}
const FIELD4INFO * Field4info::operator[] ( int index )
{
FIELD4INFO *t ;
//for loop does everything.
for ( int i=0; ( (i<index) && ( (t=(&field[i])) !=NULL ) ); i++ ) ;
return t ;
}
int Field4info::add( Data4 d )
{
int i ;
for( i = 1 ; i <= d4numFields( d.data) ; i++ )
{
FIELD4 * f ;
f = d4fieldJ( d.data, i ) ;
if( add( f4name( f ), f4type( f ), f4len( f ), f4decimals(f) ) < 0 )
return -1 ;
}
return 0 ;
}
Field4info::~Field4info()
{
free( ) ;
}
void Field4info::free( )
{
for( int i = size-1 ; i >= 0 ; i-- )
u4free( field[i].name ) ;
size = 0 ;
if( field )
{
u4free( field ) ;
field = 0 ; length = 0 ;
}
}
int Field4info::add(const char *name, char type, int len , int dec )
{
Str4ten st_name( name ) ;
st_name.upper( ) ;
st_name.trim( ) ;
if( u4allocAgain( codeBase, (char**)&field, &length, (size+2)*sizeof(FIELD4INFO)) != 0 )
return -1 ;
if( (field[size].name = (char *) u4allocEr( codeBase, 11 )) == 0 )
return -1 ;
u4ncpy( field[size].name, st_name.ptr( ), 11) ;
field[size].type = (short int) type ;
field[size].len = (unsigned short int) len ;
field[size].dec = (unsigned short int) dec ;
size++ ;
return 0 ;
}
int Field4info::add( Field4 fp )
{
return add( fp.name(), fp.type(), fp.len(), fp.decimals() ) ;
}
int Field4info::del( char *name )
{
Str4ten st_name( name ) ;
st_name.upper() ;
st_name.trim() ;
for( int i = 0 ; i < size ; i++ )
{
if( memcmp( field[i].name, st_name.ptr(), st_name.len() ) == 0 )
{
del( i ) ;
return 0 ;
}
}
codeBase->error( e4parm, E60281, name ) ;
return -1 ;
}
int Field4info::del( int index )
{
if( index >= size || index < 0 )
{
codeBase->error( e4parm, E60281 ) ;
return -1 ;
}
u4free( field[index].name ) ;
memcpy( field+index, field+index+1, sizeof(FIELD4INFO) * (size-index) ) ;
size-- ;
return 0 ;
}