/* ======================================================= *
* 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