Index: /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 11553)
+++ /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 11554)
@@ -48,4 +48,5 @@
 	KML_LinearRing*    kring =NULL;
 	KML_LineString*    kline =NULL;
+	KML_Point*         kpoint=NULL;
 
 	FILE*   fid=NULL;
@@ -60,6 +61,9 @@
 /*  read exp file  */
 
-	if (!DomainOutlineRead(&nprof,&pnvert,&pprofx,&pprofy,&closed,filexp,false))
+	if (!DomainOutlineRead(&nprof,&pnvert,&pprofx,&pprofy,&closed,filexp,true))
 		_error_("Error reading exp file.");
+	_printf_(true,"Exp2Kmlx -- Reading %d exp profiles from file \"%s\".\n",nprof,filexp);
+//	for (i=0; i<nprof; i++)
+//		printf("i=%d; nvert=%d, closed=%d\n",i,pnvert[i],closed[i]);
 
 /*  construct kml file  */
@@ -123,5 +127,5 @@
 /*  polygon with multiple holes  */
 
-	if (holes && nprof && !closed[0]) {
+	if (holes && nprof && (pnvert[0] <= 1 || pprofx[0][pnvert[0]-1] != pprofx[0][0] || pprofy[0][pnvert[0]-1] != pprofy[0][0])) {
 		_printf_(true,"Warning -- Outer profile is not closed, so \"holes\" option will be ignored.\n");
 		holes=false;
@@ -138,11 +142,10 @@
 		kring =new KML_LinearRing();
 
-		lat=(double *) xmalloc(pnvert[i]*sizeof(double));
-		lon=(double *) xmalloc(pnvert[i]*sizeof(double));
-		Xy2llx(lat,lon,pprofx[i],pprofy[i],pnvert[i],sgn,cm,sp);
-
-		kring->ncoord    =pnvert[i];
-		kring->coords    =(double (*)[3]) xmalloc(pnvert[i]*3*sizeof(double));
-		for (j=0; j<pnvert[i]; j++) {
+		kring->ncoord    =pnvert[i]-1;
+		lat=(double *) xmalloc(kring->ncoord*sizeof(double));
+		lon=(double *) xmalloc(kring->ncoord*sizeof(double));
+		Xy2llx(lat,lon,pprofx[i],pprofy[i],kring->ncoord,sgn,cm,sp);
+		kring->coords    =(double (*)[3]) xmalloc(kring->ncoord*3*sizeof(double));
+		for (j=0; j<kring->ncoord; j++) {
 			kring->coords[j][0]=lon[j];
 			kring->coords[j][1]=lat[j];
@@ -156,5 +159,5 @@
 
 		for (i=1; i<nprof; i++) {
-			if (!closed[i]) {
+			if (pnvert[i] <= 1 || pprofx[i][pnvert[i]-1] != pprofx[i][0] || pprofy[i][pnvert[i]-1] != pprofy[i][0]) {
 				_printf_(true,"Warning -- Inner profile %d is not closed with \"holes\" specified, so it will be ignored.\n",i+1);
 				continue;
@@ -163,10 +166,10 @@
 			kring =new KML_LinearRing();
 
-			lat=(double *) xmalloc(pnvert[i]*sizeof(double));
-			lon=(double *) xmalloc(pnvert[i]*sizeof(double));
-			Xy2llx(lat,lon,pprofx[i],pprofy[i],pnvert[i],sgn,cm,sp);
-			kring->ncoord    =pnvert[i];
-			kring->coords    =(double (*)[3]) xmalloc(pnvert[i]*3*sizeof(double));
-			for (j=0; j<pnvert[i]; j++) {
+			kring->ncoord    =pnvert[i]-1;
+			lat=(double *) xmalloc(kring->ncoord*sizeof(double));
+			lon=(double *) xmalloc(kring->ncoord*sizeof(double));
+			Xy2llx(lat,lon,pprofx[i],pprofy[i],kring->ncoord,sgn,cm,sp);
+			kring->coords    =(double (*)[3]) xmalloc(kring->ncoord*3*sizeof(double));
+			for (j=0; j<kring->ncoord; j++) {
 				kring->coords[j][0]=lon[j];
 				kring->coords[j][1]=lat[j];
@@ -192,5 +195,5 @@
 			kplace=new KML_Placemark();
 
-			if (closed[i]) {
+			if     (pnvert[i] > 1 && pprofx[i][pnvert[i]-1] == pprofx[i][0] && pprofy[i][pnvert[i]-1] == pprofy[i][0]) {
 				sprintf(kplace->name      ,"Polygon %d",i+1);
 				kplace->visibility=true;
@@ -200,11 +203,10 @@
 				kring =new KML_LinearRing();
 
-				lat=(double *) xmalloc(pnvert[i]*sizeof(double));
-				lon=(double *) xmalloc(pnvert[i]*sizeof(double));
-				Xy2llx(lat,lon,pprofx[i],pprofy[i],pnvert[i],sgn,cm,sp);
-
-				kring->ncoord    =pnvert[i];
-				kring->coords    =(double (*)[3]) xmalloc(pnvert[i]*3*sizeof(double));
-				for (j=0; j<pnvert[i]; j++) {
+				kring->ncoord    =pnvert[i]-1;
+				lat=(double *) xmalloc(kring->ncoord*sizeof(double));
+				lon=(double *) xmalloc(kring->ncoord*sizeof(double));
+				Xy2llx(lat,lon,pprofx[i],pprofy[i],kring->ncoord,sgn,cm,sp);
+				kring->coords    =(double (*)[3]) xmalloc(kring->ncoord*3*sizeof(double));
+				for (j=0; j<kring->ncoord; j++) {
 					kring->coords[j][0]=lon[j];
 					kring->coords[j][1]=lat[j];
@@ -221,5 +223,5 @@
 			}
 
-			else {
+			else if (pnvert[i] > 1) {
 				sprintf(kplace->name      ,"LineString %d",i+1);
 				kplace->visibility=true;
@@ -228,11 +230,10 @@
 				kline =new KML_LineString();
 
-				lat=(double *) xmalloc(pnvert[i]*sizeof(double));
-				lon=(double *) xmalloc(pnvert[i]*sizeof(double));
-				Xy2llx(lat,lon,pprofx[i],pprofy[i],pnvert[i],sgn,cm,sp);
-
 				kline->ncoord    =pnvert[i];
-				kline->coords    =(double (*)[3]) xmalloc(pnvert[i]*3*sizeof(double));
-				for (j=0; j<pnvert[i]; j++) {
+				lat=(double *) xmalloc(kline->ncoord*sizeof(double));
+				lon=(double *) xmalloc(kline->ncoord*sizeof(double));
+				Xy2llx(lat,lon,pprofx[i],pprofy[i],kline->ncoord,sgn,cm,sp);
+				kline->coords    =(double (*)[3]) xmalloc(kline->ncoord*3*sizeof(double));
+				for (j=0; j<kline->ncoord; j++) {
 					kline->coords[j][0]=lon[j];
 					kline->coords[j][1]=lat[j];
@@ -246,4 +247,24 @@
 			}
 
+			else if (pnvert[i]) {
+				sprintf(kplace->name      ,"Point %d",i+1);
+				kplace->visibility=true;
+				sprintf(kplace->styleurl  ,"#RandomLineEmptyPoly");
+
+				kpoint=new KML_Point();
+
+				lat=(double *) xmalloc(sizeof(double));
+				lon=(double *) xmalloc(sizeof(double));
+				Xy2llx(lat,lon,pprofx[i],pprofy[i],1,sgn,cm,sp);
+				kpoint->coords[0]=lon[0];
+				kpoint->coords[1]=lat[0];
+				kpoint->coords[2]=0.;
+				xfree((void**)&lon);
+				xfree((void**)&lat);
+
+				(kplace->geometry  )->AddObject((Object*)kpoint);
+				kpoint =NULL;
+			}
+
 			(kfold ->feature   )->AddObject((Object*)kplace);
 			kplace=NULL;
@@ -260,5 +281,5 @@
 /*  write kml file  */
 
-	_printf_(true,"Writing kml document to file.\n");
+	_printf_(true,"Exp2Kmlx -- Writing kml document to file \"%s\".\n",filkml);
 	fid=fopen(filkml,"w");
 	fprintf(fid,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
