Index: /issm/trunk/src/m/kml/kml_file_swrite.m
===================================================================
--- /issm/trunk/src/m/kml/kml_file_swrite.m	(revision 7418)
+++ /issm/trunk/src/m/kml/kml_file_swrite.m	(revision 7418)
@@ -0,0 +1,132 @@
+%
+%  string write a kml file of the kml objects.
+%
+%  [fid]=kml_file_swrite(kobj,filek,indent)
+%
+%  where the required input is:
+%    kobj          (kml_object, kml object to be written)
+%     or
+%    kobj          (cell array, array of kml objects)
+%
+%  the optional input is:
+%    filek         (char, name of .kml file)
+%     or
+%    filek         (numeric, file ID of already-open file,
+%                            noting 1=stdout and 2=stderr)
+%    indent        (char, indention string)
+%
+%  and the optional output is:
+%    fid           (numeric, file ID of still-open file)
+%
+function [fid]=kml_file_swrite(kobj,filek,indent)
+
+if ~nargin
+    help kml_file_swrite
+    return
+end
+
+%%  process input data
+
+if ~iscell(kobj)
+    kobj={kobj};
+end
+
+fid=0;
+if ~exist('filek' ,'var') || (~ischar(filek) && ~isnumeric(filek))
+    filek='';
+elseif ischar(filek)
+    if     strcmpi(filek,'stdout')
+        fid=1;
+    elseif strcmpi(filek,'stderr')
+        fid=2;
+    end
+elseif isnumeric(filek)
+    fid=filek;
+    if     (fid == 1)
+        filek='stdout';
+    elseif (fid == 2)
+        filek='stderr';
+    else
+        filek='';
+    end
+end
+
+if ~exist('indent','var') || ~ischar(indent)
+    indent='  ';
+end
+
+%%  string write kml file
+
+sbuf=string_buf;
+
+%  open file and write header data (if necessary)
+
+if ~fid
+    if isempty(filek)
+        filek=input('kml file to write?  ','s');
+    end
+    [pathstr,name,ext,versn] = fileparts(filek);
+    if isempty(ext)
+        ext='.kml';
+    end
+    filek=fullfile(pathstr,[name ext versn]);
+
+    display(sprintf('Opening kml file ''%s''.',filek));
+    fid=fopen(sprintf('%s',filek),'w');
+    if (fid < 0)
+        error('File ''%s'' could not be opened.',filek);
+    end
+
+    sbuf=add(sbuf,sprintf('<?xml version="1.0" encoding="UTF-8"?>\n'));
+    sbuf=add(sbuf,sprintf('<kml xmlns="http://www.opengis.net/kml/2.2">\n'));
+end
+
+%  string write kml objects
+
+if ~isempty(filek)
+    display(sprintf('Writing to kml file ''%s'':',filek));
+else
+    display(sprintf('Writing to kml file id=%d:',fid));
+end
+for i=1:numel(kobj)
+    if isa(kobj{i},'kml_object')
+        display(sprintf('  Writing object %d of class ''%s'' and size %s.',...
+            i,class(kobj{i}),string_size(kobj{i})));
+        sbuf=kml_swrite(kobj{i},sbuf,indent);
+    else
+        if ~isempty(inputname(1))
+            warning('Object ''%s{%d}'' is a ''%s'' class object, not ''%s''.',...
+                inputname(1),i,class(kobj{i}),'kml_object');
+        else
+            warning('Object {%d} is a ''%s'' class object, not ''%s''.',...
+                             i,class(kobj{i}),'kml_object');
+        end
+    end
+end
+
+%  write trailer data and close file (if necessary)
+
+if ~nargout && (fid >= 3)
+    sbuf=add(sbuf,sprintf('</kml>\n'));
+    fprintf(fid,'%s',str(sbuf));
+
+    if (fclose(fid) < 0)
+        if ~isempty(filek)
+            error('File ''%s'' could not be closed.',filek);
+        else
+            error('File id=%d could not be closed.',fid);
+        end
+    else
+        if ~isempty(filek)
+            disp(['End of file ''' filek ''' successfully written.']);
+        else
+            disp(['End of file successfully written.']);
+        end
+    end
+
+else
+    fprintf(fid,'%s',str(sbuf));
+end
+
+end
+
Index: /issm/trunk/src/m/kml/kml_mesh_elem.m
===================================================================
--- /issm/trunk/src/m/kml/kml_mesh_elem.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_mesh_elem.m	(revision 7418)
@@ -63,5 +63,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
Index: /issm/trunk/src/m/kml/kml_mesh_write.m
===================================================================
--- /issm/trunk/src/m/kml/kml_mesh_write.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_mesh_write.m	(revision 7418)
@@ -69,5 +69,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
Index: /issm/trunk/src/m/kml/kml_part_edges.m
===================================================================
--- /issm/trunk/src/m/kml/kml_part_edges.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_part_edges.m	(revision 7418)
@@ -64,5 +64,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
Index: /issm/trunk/src/m/kml/kml_part_elems.m
===================================================================
--- /issm/trunk/src/m/kml/kml_part_elems.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_part_elems.m	(revision 7418)
@@ -64,5 +64,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
Index: /issm/trunk/src/m/kml/kml_part_flagedges.m
===================================================================
--- /issm/trunk/src/m/kml/kml_part_flagedges.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_part_flagedges.m	(revision 7418)
@@ -56,5 +56,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
Index: /issm/trunk/src/m/kml/kml_partitions.m
===================================================================
--- /issm/trunk/src/m/kml/kml_partitions.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_partitions.m	(revision 7418)
@@ -65,5 +65,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
Index: /issm/trunk/src/m/kml/kml_unsh_edges.m
===================================================================
--- /issm/trunk/src/m/kml/kml_unsh_edges.m	(revision 7417)
+++ /issm/trunk/src/m/kml/kml_unsh_edges.m	(revision 7418)
@@ -56,5 +56,5 @@
 if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
    isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
-    if     ~exist('latsgn')
+    if     ~exist('latsgn','var')
         error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     elseif (abs(latsgn) ~= 1)
