/* ======================================================= *
 * Copyright 1998-2005 Stephen C. Grubb                    *
 * http://ploticus.sourceforge.net                         *
 * Covered by GPL; see the file ./Copyright for details.   *
 * ======================================================= */

#include "tdhkit.h" /* for MAXITEMS */
#include "pl.h"
#define MAXNAMES MAXITEMS

static char fname[MAXNAMES][NAMEMAXLEN];
static int nfname = 0;
static int errflag = 0;
static int showerr = 1;
static int encodemode = 0; /* if 1, '_' will be converted to ' ' and '|' to comma when presenting field names */



/* ============================ */
int
PL_fieldnames_initstatic()
{
nfname = 0;
errflag = 0;
showerr = 1;
encodemode = 0;
return( 0 );
}

/* ============================ */
/* DEFINEFIELDNAMES - define field names from a list 
   (space or comma-delimited).  Returns # of field names. */

int
PL_definefieldnames( list )
char *list;
{
int i, slen;


nfname = 0;

for( i = 0, slen = strlen( list ); i < slen; i++ ) {
	if( list[i] == ',' || list[i] == '\n' || list[i] == '"' ) list[i] = ' ';
	}

i = 0;
if( PLS.debug ) fprintf( PLS.diagfp, "Data field names are: " );
while( 1 ) {
	strncpy( fname[ nfname ], GL_getok( list, &i ), NAMEMAXLEN-1 ); /* changed to strncpy() scg 8/4/04 */
	if( fname[ nfname ][0] == '\0' ) break;
	fname[ nfname ][ NAMEMAXLEN-1 ]  = '\0';			/* scg 8/4/04 */
	if( PLS.debug ) fprintf( PLS.diagfp, "%s ", fname[nfname] ); 
	nfname++;
	if( nfname >= MAXNAMES ) { fprintf( PLS.diagfp, "Too many field names.. ignoring extras\n" ); return( nfname ); }
	}
if( PLS.debug ) fprintf( PLS.diagfp, "\n" );
return( nfname );
}

/* ============================ */
/* FREF - given a field name or number, return the field number (1st = 1) */
int
PL_fref( name )
char *name;
{
int i, fld, prec, stat;

fld = 0;
errflag = 0;

/* plain number.. */
i = atoi( name );

/* stat added scg 9/26/00 */
stat = GL_goodnum( name, &prec );

if( i > 0 && stat ) fld = i; 

/* @number.. */
else if( name[0] == '@' ) {
	stat = GL_goodnum( &name[1], &prec );
	i = atoi( &name[1] );
	if( i > 0 && stat ) fld = i;
	}

/* name.. */
else if( nfname > 0 ) {
	for( i = 0; i < nfname; i++ ) {
		if( strcmp( name, fname[i] ) == 0 ) {
			fld = i + 1;
			break;
			}
		}
	}

if( fld < 1 ) {  /* || fld > Nfields -- don't do this because Nfields might not be set yet
			if coming in from getdata select  -scg 10/7/00 */
	if( showerr ) Eerr( 2479, "No such data field", name );
	errflag = 1;
	return( 1 ); /* use 1 to be safe; return value is not checked by caller */
	}

return( fld );
}
/* ============================ */
/* GETFNAME - given a field number, return the field name assigned to
	that field (first is 1).
	Result will be "" if no field name has been assigned to field N. */

int
PL_getfname( n, result )
int n;
char *result;
{
int i;
if( n > nfname || n < 1 ) strcpy( result, "" );
else strcpy( result, fname[ n-1 ] );
if( encodemode ) {
	for( i = 0; result[i] != '\0'; i++  ) {
		if( result[i] == '_' ) result[i] = ' ';
		if( result[i] == '|' ) result[i] = ',';
		}
	}
return( 0 );
}

/* ============================= */
/* FREF_ERROR - get fref error flag */
int
PL_fref_error()
{
return( errflag );
}
/* ============================= */
/* FREF_SHOWERR - turn off/on "No such data field" message */
int
PL_fref_showerr( mode )
int mode;
{
showerr = mode;
return( 0 );
}

/* =============================== */
/* ENCODE_FNAMES - turn off/on space and comma encoding */
int
PL_encode_fnames( mode )
int mode;
{
encodemode = mode;
return( 0 );
}

/* ======================================================= *
 * Copyright 1998-2005 Stephen C. Grubb                    *
 * http://ploticus.sourceforge.net                         *
 * Covered by GPL; see the file ./Copyright for details.   *
 * ======================================================= */


syntax highlighted by Code2HTML, v. 0.9.1