Index: /issm/trunk/src/c/objects/KML/KML_ColorStyle.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_ColorStyle.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_ColorStyle.cpp	(revision 8207)
@@ -90,4 +90,12 @@
 /*}}}*/
 
+/*FUNCTION KML_ColorStyle::Read {{{1*/
+KML_Object*  KML_ColorStyle::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_ColorStyle::Id {{{1*/
 int   KML_ColorStyle::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_ColorStyle.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_ColorStyle.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_ColorStyle.h	(revision 8207)
@@ -34,4 +34,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Container.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Container.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Container.cpp	(revision 8207)
@@ -74,4 +74,13 @@
 /*}}}*/
 
+/*FUNCTION KML_Container::Read {{{1*/
+KML_Object*  KML_Container::Read(FILE* fid,char* kstr){
+
+	KML_Feature::Read(fid,kstr);
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Container::Id {{{1*/
 int   KML_Container::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Container.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Container.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Container.h	(revision 8207)
@@ -28,4 +28,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Document.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Document.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Document.cpp	(revision 8207)
@@ -119,4 +119,57 @@
 /*}}}*/
 
+/*FUNCTION KML_Document::Read {{{1*/
+KML_Object*  KML_Document::Read(FILE* fid,char* kstr){
+
+	char*        kstri;
+	KML_Object*  kobj;
+
+/*  check for id attribute  */
+
+//	KML_Object::Read(fid,kstr);
+	KMLFileTagAttrib( id        ,NULL,KML_OBJECT_ID_LENGTH,
+					 kstr,
+					 "id");
+
+/*  loop over and process fields within opening and closing tags  */
+
+	while (kstri=KMLFileToken(fid)) {
+		if      (!strncmp(kstri,"</Document",10)) {
+			xfree((void**)&kstri);
+			break;
+		}
+		else if (!strncmp(kstri,"</",2))
+			_error_("KML_Document::Read -- Unexpected closing tag %s.\n",kstri);
+		else if (strncmp(kstri,"<",1))
+			_error_("KML_Document::Read -- Unexpected field \"%s\".\n",kstri);
+
+		else if (!strncmp(kstri,"<Placemark",10)) {
+			kobj=(KML_Object*)new KML_Placemark();
+			kobj->Read(fid,kstri);
+			feature   ->AddObject((Object*)kobj);
+		}
+
+		else if (!strncmp(kstri,"<Folder",7)) {
+			kobj=(KML_Object*)new KML_Folder();
+			kobj->Read(fid,kstri);
+			feature   ->AddObject((Object*)kobj);
+		}
+
+		else if (!strncmp(kstri,"<Document",9)) {
+			kobj=(KML_Object*)new KML_Document();
+			kobj->Read(fid,kstri);
+			feature   ->AddObject((Object*)kobj);
+		}
+
+		else if (!strncmp(kstri,"<",1))
+			KML_Container::Read(fid,kstri);
+
+		xfree((void**)&kstri);
+	}
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Document::Id {{{1*/
 int   KML_Document::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Document.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Document.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Document.h	(revision 8207)
@@ -32,4 +32,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Feature.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Feature.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Feature.cpp	(revision 8207)
@@ -140,4 +140,56 @@
 /*}}}*/
 
+/*FUNCTION KML_Feature::Read {{{1*/
+KML_Object*  KML_Feature::Read(FILE* fid,char* kstr){
+
+	KML_Object*  kobj;
+
+/*  process field within opening and closing tags  */
+
+	if      (!strncmp(kstr,"</Feature", 9))
+		return(NULL);
+	else if (!strncmp(kstr,"</",2))
+		_error_("KML_Feature::Read -- Unexpected closing tag %s.\n",kstr);
+	else if (strncmp(kstr,"<",1))
+		_error_("KML_Feature::Read -- Unexpected field \"%s\".\n",kstr);
+
+	else if (!strncmp(kstr,"<Style", 6)) {
+		kobj=(KML_Object*)new KML_Style();
+		kobj->Read(fid,kstr);
+		style     ->AddObject((Object*)kobj);
+	}
+
+	else if (!strcmp(kstr,"<name>"))
+		KMLFileTokenParse( name      ,NULL,KML_FEATURE_NAME_LENGTH,
+						  kstr,
+						  fid);
+	else if (!strcmp(kstr,"<visibility>"))
+		KMLFileTokenParse(&visibility,
+						  kstr,
+						  fid);
+	else if (!strcmp(kstr,"<open>"))
+		KMLFileTokenParse(&open      ,
+						  kstr,
+						  fid);
+	else if (!strncmp(kstr,"<snippet", 8))
+		KMLFileTokenParse( snippet   ,NULL,KML_FEATURE_SNIPPET_LENGTH,
+						  kstr,
+						  fid);
+	else if (!strcmp(kstr,"<description>"))
+		KMLFileTokenParse( descript  ,NULL,KML_FEATURE_DESCRIPT_LENGTH,
+						  kstr,
+						  fid);
+	else if (!strcmp(kstr,"<styleUrl>"))
+		KMLFileTokenParse( styleurl  ,NULL,KML_FEATURE_STYLEURL_LENGTH,
+						  kstr,
+						  fid);
+
+	else if (!strncmp(kstr,"<",1))
+		KML_Object::Read(fid,kstr);
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Feature::Id {{{1*/
 int   KML_Feature::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Feature.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Feature.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Feature.h	(revision 8207)
@@ -43,4 +43,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Folder.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Folder.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Folder.cpp	(revision 8207)
@@ -119,4 +119,12 @@
 /*}}}*/
 
+/*FUNCTION KML_Folder::Read {{{1*/
+KML_Object*  KML_Folder::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Folder::Id {{{1*/
 int   KML_Folder::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Folder.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Folder.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Folder.h	(revision 8207)
@@ -32,4 +32,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Geometry.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Geometry.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Geometry.cpp	(revision 8207)
@@ -74,4 +74,12 @@
 /*}}}*/
 
+/*FUNCTION KML_Geometry::Read {{{1*/
+KML_Object*  KML_Geometry::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Geometry::Id {{{1*/
 int   KML_Geometry::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Geometry.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Geometry.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Geometry.h	(revision 8207)
@@ -28,4 +28,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_LineString.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LineString.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_LineString.cpp	(revision 8207)
@@ -122,4 +122,12 @@
 /*}}}*/
 
+/*FUNCTION KML_LineString::Read {{{1*/
+KML_Object*  KML_LineString::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_LineString::Id {{{1*/
 int   KML_LineString::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_LineString.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LineString.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_LineString.h	(revision 8207)
@@ -36,4 +36,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_LineStyle.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LineStyle.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_LineStyle.cpp	(revision 8207)
@@ -96,4 +96,12 @@
 /*}}}*/
 
+/*FUNCTION KML_LineStyle::Read {{{1*/
+KML_Object*  KML_LineStyle::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_LineStyle::Id {{{1*/
 int   KML_LineStyle::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_LineStyle.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LineStyle.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_LineStyle.h	(revision 8207)
@@ -30,4 +30,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_LinearRing.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LinearRing.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_LinearRing.cpp	(revision 8207)
@@ -122,4 +122,12 @@
 /*}}}*/
 
+/*FUNCTION KML_LinearRing::Read {{{1*/
+KML_Object*  KML_LinearRing::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_LinearRing::Id {{{1*/
 int   KML_LinearRing::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_LinearRing.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LinearRing.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_LinearRing.h	(revision 8207)
@@ -36,4 +36,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp	(revision 8207)
@@ -119,4 +119,12 @@
 /*}}}*/
 
+/*FUNCTION KML_MultiGeometry::Read {{{1*/
+KML_Object*  KML_MultiGeometry::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_MultiGeometry::Id {{{1*/
 int   KML_MultiGeometry::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_MultiGeometry.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_MultiGeometry.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_MultiGeometry.h	(revision 8207)
@@ -32,4 +32,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Object.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Object.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Object.cpp	(revision 8207)
@@ -80,4 +80,26 @@
 /*}}}*/
 
+/*FUNCTION KML_Object::Read {{{1*/
+KML_Object*  KML_Object::Read(FILE* fid,char* kstr){
+
+/*  process field within opening and closing tags  */
+
+	if      (!strncmp(kstr,"</Object", 8))
+		return(NULL);
+	else if (!strncmp(kstr,"</",2))
+		_error_("KML_Object::Read -- Unexpected closing tag %s.\n",kstr);
+	else if (strncmp(kstr,"<",1))
+		_error_("KML_Object::Read -- Unexpected field \"%s\".\n",kstr);
+
+	else if (!strncmp(kstr,"<",1)) {
+		_printf_(true,"KML_Object::Read -- Unrecognized opening tag %s.\n",kstr);
+		KMLFileTagSkip(kstr,
+					   fid);
+	}
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Object::Id {{{1*/
 int   KML_Object::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Object.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Object.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Object.h	(revision 8207)
@@ -27,7 +27,7 @@
 		/*}}}*/
 		/*Object virtual functions definitions:{{{1*/
-		void  Echo();
-		void  DeepEcho();
-		void  DeepEcho(char* indent);
+		virtual void  Echo();
+		virtual void  DeepEcho();
+		virtual void  DeepEcho(char* indent);
 		int   Id();
 		int   MyRank();
@@ -41,4 +41,5 @@
 		/*virtual functions: */
 		virtual void  Write(FILE* fid,char* indent)=0;
+		virtual KML_Object*  Read(FILE* fid,char* kstr)=0;
 
 
Index: /issm/trunk/src/c/objects/KML/KML_Placemark.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Placemark.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Placemark.cpp	(revision 8207)
@@ -119,4 +119,12 @@
 /*}}}*/
 
+/*FUNCTION KML_Placemark::Read {{{1*/
+KML_Object*  KML_Placemark::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Placemark::Id {{{1*/
 int   KML_Placemark::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Placemark.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Placemark.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Placemark.h	(revision 8207)
@@ -32,4 +32,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_PolyStyle.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_PolyStyle.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_PolyStyle.cpp	(revision 8207)
@@ -100,4 +100,12 @@
 /*}}}*/
 
+/*FUNCTION KML_PolyStyle::Read {{{1*/
+KML_Object*  KML_PolyStyle::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_PolyStyle::Id {{{1*/
 int   KML_PolyStyle::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_PolyStyle.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_PolyStyle.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_PolyStyle.h	(revision 8207)
@@ -31,4 +31,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Polygon.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Polygon.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Polygon.cpp	(revision 8207)
@@ -155,4 +155,12 @@
 /*}}}*/
 
+/*FUNCTION KML_Polygon::Read {{{1*/
+KML_Object*  KML_Polygon::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Polygon::Id {{{1*/
 int   KML_Polygon::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Polygon.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Polygon.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Polygon.h	(revision 8207)
@@ -38,4 +38,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_Style.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Style.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Style.cpp	(revision 8207)
@@ -175,4 +175,12 @@
 /*}}}*/
 
+/*FUNCTION KML_Style::Read {{{1*/
+KML_Object*  KML_Style::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_Style::Id {{{1*/
 int   KML_Style::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_Style.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Style.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_Style.h	(revision 8207)
@@ -37,4 +37,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_StyleSelector.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_StyleSelector.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_StyleSelector.cpp	(revision 8207)
@@ -74,4 +74,12 @@
 /*}}}*/
 
+/*FUNCTION KML_StyleSelector::Read {{{1*/
+KML_Object*  KML_StyleSelector::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_StyleSelector::Id {{{1*/
 int   KML_StyleSelector::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_StyleSelector.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_StyleSelector.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_StyleSelector.h	(revision 8207)
@@ -28,4 +28,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
Index: /issm/trunk/src/c/objects/KML/KML_SubStyle.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_SubStyle.cpp	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_SubStyle.cpp	(revision 8207)
@@ -74,4 +74,12 @@
 /*}}}*/
 
+/*FUNCTION KML_SubStyle::Read {{{1*/
+KML_Object*  KML_SubStyle::Read(FILE* filin,char* kstr){
+
+
+	return(NULL);
+}
+/*}}}*/
+
 /*FUNCTION KML_SubStyle::Id {{{1*/
 int   KML_SubStyle::Id(){
Index: /issm/trunk/src/c/objects/KML/KML_SubStyle.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_SubStyle.h	(revision 8206)
+++ /issm/trunk/src/c/objects/KML/KML_SubStyle.h	(revision 8207)
@@ -28,4 +28,5 @@
 		void  DeepEcho(char* indent);
 		void  Write(FILE* fid,char* indent);
+		KML_Object*  Read(FILE* fid,char* kstr);
 		int   Id();
 		int   MyRank();
