// names.cxx -- process shapefiles names
//
// Written by Curtis Olson, started February 1999.
//
// Copyright (C) 1999  Curtis L. Olson  - curt@flightgear.org
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// $Id$
// (Log is kept at end of this file)
 
#include <Include/compiler.h>

#include STL_STRING

#include "names.hxx"


// return the type of the shapefile record
AreaType get_area_type(GDBFile *dbf, int rec) {
    GDBFieldDesc *fdesc[128];	// 128 is an arbitrary number here
    GDBFValue *fields;		//an array of field values
    char* dbf_rec;		//a record containing all the fields

    // grab the meta-information for all the fields
    // this applies to all the records in the DBF file.
    // for ( int i = 0; i < dbf->numFields(); i++ ) {
    //   fdesc[i] = dbf->getFieldDesc(i);
    //   cout << i << ") " << fdesc[i]->name << endl;
    // }

    // this is the whole name record
    dbf_rec = dbf->getRecord( rec );

    // parse it into individual fields
    if ( dbf_rec ) {
	fields = dbf->recordDeform( dbf_rec );
    }

    string area = fields[4].str_v;
    // strip leading spaces
    while ( area[0] == ' ' ) {
	area = area.substr(1, area.length() - 1);
    }
    // strip trailing spaces
    while ( area[area.length() - 1] == ' ' ) {
	area = area.substr(0, area.length() - 1);
    }
    // strip other junk encountered
    while ( (int)area[area.length() - 1] == 9 ) {
	area = area.substr(0, area.length() - 1);
    }

    if ( area == "Swamp or Marsh" ) {
	return MarshArea;
    } else if ( area == "Bay  Estuary or Ocean" ) {
	return OceanArea;
    } else if ( area == "Lake" ) {
	return LakeArea;
    } else if ( area == "Lake   Dry" ) {
	return DryLakeArea;
    } else if ( area == "Lake   Intermittent" ) {
	return IntLakeArea;
    } else if ( area == "Reservoir" ) {
	return ReservoirArea;
    } else if ( area == "Reservoir   Intermittent" ) {
	return IntReservoirArea;
    } else if ( area == "Stream" ) {
	return StreamArea;
    } else if ( area == "Canal" ) {
	return CanalArea;
    } else if ( area == "Glacier" ) {
	return GlacierArea;
    } else if ( area == "Void Area" ) {
	return VoidArea;
    } else if ( area == "Null" ) {
	return NullArea;
    } else {
	cout << "unknown area = '" << area << "'" << endl;
	// cout << "area = " << area << endl;
	for ( int i = 0; i < area.length(); i++ ) {
	    cout << i << ") " << (int)area[i] << endl;
	}
	return UnknownArea;
    }
}


// $Log$
// Revision 1.1  1999/02/23 01:29:05  curt
// Additional progress.
//