/* d4field.c   (c)Copyright Sequiter Software Inc., 1988-1996.  All rights reserved. */

#include "d4all.h"
#ifndef S4UNIX
   #ifdef __TURBOC__
      #pragma hdrstop
   #endif
#endif

FIELD4 *S4FUNCTION d4field( DATA4 *data, const char *fieldName )
{
   int i ;

   #ifdef S4VBASIC
      if ( c4parm_check( data, 2, E94001 ) )
         return 0 ;
   #endif

   #ifdef E4PARM_HIGH
      if ( data == 0 )
      {
         error4( 0, e4parm_null, E94001 ) ;
         return 0 ;
      }
   #endif

   i =  d4fieldNumber( data, fieldName ) - 1 ;
   if ( i < 0 )
      return 0 ;

   return data->fields + i ;
}

FIELD4 *S4FUNCTION d4fieldJ( DATA4 *data, const int jField )
{
   #ifdef S4VBASIC
      if ( c4parm_check( data, 2, E94002 ) )
         return 0 ;
   #endif

   #ifdef E4PARM_HIGH
      if ( data == 0 )
      {
         error4( 0, e4parm_null, E94002 ) ;
         return (FIELD4 *)0 ;
      }
      if ( jField <= 0 || data->fields == 0 || jField > data->dataFile->nFields )
      {
         error4( data->codeBase, e4parm, E94002 ) ;
         return (FIELD4 *)0 ;
      }
   #endif

   return data->fields + jField - 1 ;
}

int S4FUNCTION d4fieldNumber( DATA4 *data, const char *fieldName )
{
   char buf[256] ;
   int i ;

   #ifdef E4PARM_HIGH
      if ( data == 0 )
         return error4( 0, e4parm_null, E94003 ) ;
   #endif

   if ( fieldName )
   {
      u4ncpy( buf, fieldName, sizeof( buf ) ) ;
      c4trimN( buf, sizeof( buf ) ) ;
      c4upper( buf ) ;

      for ( i = 0 ; i < data->dataFile->nFields ; i++ )
         if ( !strcmp( buf, data->fields[i].name ) )
            return i + 1 ;
   }

   if ( data->codeBase->errFieldName )
      return error4describe( data->codeBase, e4fieldName, E94003, fieldName, 0, 0 ) ;
   return e4fieldName ;
}

#ifdef S4VB_DOS

FIELD4 *d4field_v( DATA4 *d4, char *fldName )
{
   return d4field( d4, c4str(fldName) ) ;
}

int d4fieldNumber( DATA4 *d4, char *fldName )
{
   return d4fieldNumber( d4, c4str(fldName) ) ;
}

#endif