# $Header: /home/cvsroot/tcldb/ucodb/Tlib/doSaveSheet,v 1.5 1998/02/16 04:39:12 de Exp $
# tcl procs saved on Tue Sep 05 09:32:41 PDT 1995

proc doSaveSheet {t mode win filename} {

  global CellValues CellFormulae

#
#	future modes:  HTML, LaTeX, formula
#	HTM LTX FOR
#

  set openrc [catch {set f [open $filename w]}]
  
  if $openrc==1 {
    setMsg $SheetM "Sorry, cannot open $filename for writing."
    return -1
  }

  set tw [sheetWin $t]
  set msgw $tw.msg

  set cells [$t curselection]

#       puts stderr "Got Cells $cells"
  set rows ""
  if {$cells == ""} {
        puts stderr "save whole sheet"
        set r1 1
        set c1 1
        set r2 [$t cget -rows]
        set c2 [$t cget -cols]
  } else {
        lassign [split [lindex $cells 0] ,] r1 c1
        lassign [split [lindex $cells end] ,] r2 c2
        puts stderr "ingest $r1,$c1 through $r2,$c2"
#       it's meaningless to plot one row.
        if {$r1 == $r2} {set c2 $c1}
  }

  set rs [$t cget -rows]
  set cs [$t cget -cols]

#	find the last row with any data in it
  set lastrow 1
  loop i 1 $rs {
	set inds [array names CellValues $i,*]
#	puts stderr "for row $i, inds are $inds"
	if {[llength $inds] > 1} {
		set lastrow $i
	}
  }
#
  loop j 1 $cs {
	set cw($j) 12
	catch {set cw($j) [$t width $j]}
  }
  loop i 1 [expr $lastrow + 1] {
	set out ""
	loop j 1 $cs {
		set v ""
		catch {set v $CellValues($i,$j)}
		switch $mode {
		TSV { lappend out $v }
		ARF { 
			regsub -all , $v " " v
			lappend out $v 
		}
		FOR {
			if {[info exists CellFormulae($i,$j)]} {
			set v "=$CellFormulae($i,$j)"
			}
			lappend out "$v"
		}
		TXT {
			set w $cw($j)
			append out "[format %-$w.${w}s $v] "
		}
		}
	}
	switch -regexp $mode {
	{TSV|FOR} {
		puts $f "[join $out \t]"
	} 
	ARF {
		puts $f "[join $out ,]"
	}
	TXT { puts $f "$out" }
	}
  }

  close $f
  setMsg $msgw "Saved sheet contents in $mode to $filename"
  destroy $win

}

