Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 10255)
+++ /issm/trunk/src/c/Makefile.am	(revision 10256)
@@ -111,4 +111,6 @@
 					./objects/KML/KML_Overlay.cpp\
 					./objects/KML/KML_Overlay.h\
+					./objects/KML/KML_Point.cpp\
+					./objects/KML/KML_Point.h\
 					./objects/KML/KML_Placemark.cpp\
 					./objects/KML/KML_Placemark.h\
Index: /issm/trunk/src/c/objects/KML/KMLFileReadUtils.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KMLFileReadUtils.cpp	(revision 10255)
+++ /issm/trunk/src/c/objects/KML/KMLFileReadUtils.cpp	(revision 10256)
@@ -353,4 +353,63 @@
 
 /*FUNCTION  KMLFileTokenParse {{{1*/
+int KMLFileTokenParse(double **pdval,int* m,int maxlen,
+					  char* ktag,
+					  FILE* fid){
+
+	int     i=-1,j;
+	char*   kstr;
+	char*   ktok;
+	char    delim[]={' ',',','\f','\n','\r','\t','\v','\0'};
+
+/*  get next token and allocate if necessary  */
+
+	if (!(kstr=KMLFileToken(fid)) ||
+		(kstr[0] == '<'))
+		_error_("KMLFileTokenParse -- Missing double [m] field for %s.\n",ktag);
+
+	if (!*pdval)
+		if (maxlen)
+			*pdval=(double *) xmalloc(maxlen              *sizeof(double));
+		else
+			*pdval=(double *) xmalloc(((strlen(kstr)+1)/2)*sizeof(double));
+
+/*  loop through string to get all values  */
+
+	ktok=strtok(kstr,delim);
+	while (ktok) {
+		i++;
+		if (maxlen && (maxlen < i+1))
+			_error_("KMLFileTokenParse -- Double [m] field too short for %s.\n",ktag);
+		sscanf(ktok,"%lg",&((*pdval)[i]));
+		ktok=strtok(NULL,delim);
+	}
+	xfree((void**)&kstr);
+
+	if (!maxlen)
+		*pdval=(double *) xrealloc(*pdval,(i+1)*sizeof(double));
+
+	if (m)
+		*m=i+1;
+
+/*  get additional token and compare to closing tag  */
+
+	if (ktag)
+		if (!(kstr=KMLFileToken(fid)) ||
+			(kstr[0] != '<') ||
+			(kstr[1] != '/') ||
+			(strncmp(&(kstr[2]),&(ktag[1]),strlen(ktag)-1)))
+			_error_("KMLFileTokenParse -- Missing closing tag for %s.\n",ktag);
+		else
+			xfree((void**)&kstr);
+
+//	_printf_(true,"KMLFileTokenParse -- %s=...\n",ktag);
+//	for (j=0; j<=i; j++)
+//		_printf_(true,"   [%d]: %g\n",j,(*pdval)[j]);
+
+	return(0);
+}
+/*}}}*/
+
+/*FUNCTION  KMLFileTokenParse {{{1*/
 int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
 					  char* ktag,
Index: /issm/trunk/src/c/objects/KML/KMLFileReadUtils.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KMLFileReadUtils.h	(revision 10255)
+++ /issm/trunk/src/c/objects/KML/KMLFileReadUtils.h	(revision 10256)
@@ -36,4 +36,7 @@
 					  char* ktag,
 					  FILE* fid);
+int KMLFileTokenParse(double **pdval,int* m,int maxlen,
+					  char* ktag,
+					  FILE* fid);
 int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
 					  char* ktag,
Index: /issm/trunk/src/c/objects/KML/KML_Point.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Point.cpp	(revision 10256)
+++ /issm/trunk/src/c/objects/KML/KML_Point.cpp	(revision 10256)
@@ -0,0 +1,193 @@
+/*!\file KML_Point.cpp
+ * \brief: implementation of the kml_point object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../io/io.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+#include "../../modules/Ll2xyx/Ll2xyx.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION KML_Point::KML_Point(){{{1*/
+KML_Point::KML_Point(){
+
+	extrude   =false;
+	memcpy(altmode,"clampToGround",(strlen("clampToGround")+1)*sizeof(char));
+
+	coords[0] = 0.;
+	coords[1] = 0.;
+	coords[2] = 0.;
+
+}
+/*}}}*/
+/*FUNCTION KML_Point::~KML_Point(){{{1*/
+KML_Point::~KML_Point(){
+
+	;
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION KML_Point::Echo {{{1*/
+void  KML_Point::Echo(){
+
+	bool  flag=true;
+
+	_printf_(flag,"KML_Point:\n");
+	KML_Geometry::Echo();
+
+	_printf_(flag,"       extrude: %s\n"         ,(extrude ? "true" : "false"));
+	_printf_(flag,"       altmode: \"%s\"\n"     ,altmode);
+	_printf_(flag,"        coords: (%g,%g,%g)\n" ,coords[0],coords[1],coords[2]);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Point::DeepEcho {{{1*/
+void  KML_Point::DeepEcho(){
+
+	char  indent[81]="";
+
+	KML_Point::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Point::DeepEcho {{{1*/
+void  KML_Point::DeepEcho(char* indent){
+
+	bool  flag=true;
+
+	_printf_(flag,"%sKML_Point:\n",indent);
+	KML_Geometry::DeepEcho(indent);
+
+	_printf_(flag,"%s       extrude: %s\n"         ,indent,(extrude ? "true" : "false"));
+	_printf_(flag,"%s       altmode: \"%s\"\n"     ,indent,altmode);
+	_printf_(flag,"%s        coords: (%g,%g,%g)\n" ,coords[0],coords[1],coords[2]);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Point::Write {{{1*/
+void  KML_Point::Write(FILE* filout,char* indent){
+
+	fprintf(filout,"%s<Point",indent);
+	WriteAttrib(filout," ");
+	fprintf(filout,">\n");
+
+	KML_Geometry::Write(filout,indent);
+
+	fprintf(filout,"%s  <extrude>%d</extrude>\n",indent,(extrude ? 1 : 0));
+	fprintf(filout,"%s  <altitudeMode>%s</altitudeMode>\n",indent,altmode);
+	fprintf(filout,"%s  <coordinates>%0.16g,%0.16g,%0.16g</coordinates>\n",
+			indent,coords[0],coords[1],coords[2]);
+
+	fprintf(filout,"%s</Point>\n",indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Point::Read {{{1*/
+void  KML_Point::Read(FILE* fid,char* kstr){
+
+	char*        kstri;
+
+/*  get object attributes  */
+
+	KMLFileTagAttrib(this,
+					 kstr);
+
+/*  loop over and process fields within opening and closing tags  */
+
+	while (kstri=KMLFileToken(fid)) {
+		if      (!strncmp(kstri,"</Point", 7)) {
+			xfree((void**)&kstri);
+			break;
+		}
+		else if (!strncmp(kstri,"</",2))
+			_error_("KML_Point::Read -- Unexpected closing tag %s.\n",kstri);
+		else if (strncmp(kstri,"<",1))
+			_error_("KML_Point::Read -- Unexpected field \"%s\".\n",kstri);
+
+		else if (!strcmp(kstri,"<extrude>"))
+			KMLFileTokenParse(&extrude   ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<altitudeMode>"))
+			KMLFileTokenParse( altmode   ,NULL,KML_POINT_ALTMODE_LENGTH,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<coordinates>"))
+			KMLFileTokenParse((double **)&coords    ,NULL       ,3,
+							  kstri,
+							  fid);
+
+		else if (!strncmp(kstri,"<",1))
+			KML_Geometry::Read(fid,kstri);
+
+		xfree((void**)&kstri);
+	}
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Point::WriteExp {{{1*/
+void  KML_Point::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
+
+	int     i;
+	double  lat,lon,x,y;
+	char    nstr2[81];
+
+/*  extract latitude and longitude  */
+
+	lon=coords[0];
+	lat=coords[1];
+
+/*  convert latitude and longitude to x and y  */
+
+	Ll2xyx(&x,&y,&lat,&lon,1,sgn,cm,sp);
+
+/*  write header  */
+
+	memcpy(nstr2,nstr,(strlen(nstr)+1)*sizeof(char));
+
+	for (i=0; i<strlen(nstr2); i++)
+		if ((nstr2[i] == ' ') || (nstr2[i] == '\t'))
+			nstr2[i]='_';
+	fprintf(fid,"## Name:%s\n",nstr2);
+	fprintf(fid,"## Icon:0\n");
+	fprintf(fid,"# Points Count	Value\n");
+    fprintf(fid,"%u	%s\n",1,"1.");
+	fprintf(fid,"# X pos	Y pos\n");
+
+/*  write vertex  */
+
+    fprintf(fid,"%lf\t%lf\n",x,y);
+
+/*  write blank line  */
+
+	fprintf(fid,"\n");
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_Point.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Point.h	(revision 10256)
+++ /issm/trunk/src/c/objects/KML/KML_Point.h	(revision 10256)
@@ -0,0 +1,49 @@
+/*! \file KML_Point.h 
+ *  \brief: header file for kml_point object
+ */
+
+#ifndef _KML_POINT_H_
+#define _KML_POINT_H_
+
+#define KML_POINT_ALTMODE_LENGTH    18
+
+/*Headers:*/
+/*{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./KML_Geometry.h"
+/*}}}*/
+
+class KML_Point: public KML_Geometry {
+
+	public:
+
+		bool  extrude;
+		char  altmode[KML_POINT_ALTMODE_LENGTH+1];
+		double coords[3];
+
+		/*KML_Point constructors, destructors {{{1*/
+		KML_Point();
+		~KML_Point();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		void  Write(FILE* fid,char* indent);
+		void  Read(FILE* fid,char* kstr);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
+		int   Id(){_error_("Not implemented yet.");};
+		int   MyRank(){_error_("Not implemented yet.");};
+		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   MarshallSize(){_error_("Not implemented yet.");};
+		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   ObjectEnum(){_error_("Not implemented yet.");};
+		Object* copy(){_error_("Not implemented yet.");};
+		/*}}}*/
+
+};
+#endif  /* _KML_POINT_H */
+
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 10255)
+++ /issm/trunk/src/c/objects/objects.h	(revision 10256)
@@ -64,4 +64,5 @@
 #include "./KML/KML_Object.h"
 #include "./KML/KML_Overlay.h"
+#include "./KML/KML_Point.h"
 #include "./KML/KML_Placemark.h"
 #include "./KML/KML_Polygon.h"
