#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]

APSStandardSetup

proc Convert {args} {
    set sddsinput ""
    set csvoutput ""
    set noParam 0
    APSStrictParseArguments {sddsinput csvoutput noParam}

    if {[catch {sdds load $sddsinput data} results]} {
        puts stderr "Error: $results"
        exit
    }
    
    set output ""
    
    set pages 0
    if {[llength $data(ParameterNames)]} {
        set pages [llength $data(Parameter.[lindex $data(ParameterNames) 0])]
    } elseif {[llength $data(ColumnNames)]} {
        set pages [llength $data(Column.[lindex $data(ColumnNames) 0])]
    } elseif {[llength $data(ArrayNames)]} {
        set pages [llength $data(Array.[lindex $data(ArrayNames) 0])]
    }
    
    for {set page 0} {$page < $pages} {incr page} {
        if {!$noParam} {
            if {[llength $data(ParameterNames)]} {
                foreach p $data(ParameterNames) {
                    append output "${p},[lindex $data(Parameter.$p) $page]\n"
                }
                append output \n
            }
        }
        if {[llength $data(ColumnNames)]} {
            set rows [llength [lindex $data(Column.[lindex $data(ColumnNames) 0]) $page]]
            append output "[join $data(ColumnNames) ,]\n"
            for {set row 0} {$row < $rows} {incr row} {
                set line ""
                foreach c $data(ColumnNames) {
                    append line "[lindex [lindex $data(Column.$c) $page] $row] "
                }
                append output [join $line ,]\n
            }
            append output \n
        }
        if {[llength $data(ArrayNames)]} {
            foreach a $data(ArrayNames) {
                set line ""
                set odd 1
                foreach element [lindex $data(Array.$a) $page] {
                    if {$odd} {
                        set odd 0
                        continue
                    } else {
                        set odd 1
                        append line "$element "
                    }
                }
                append output "${a},[join $line ,]\n"
            }
            append output \n
        }
    }
    
    
    set fid [open $csvoutput w]
    puts $fid $output
    close $fid
}

set input ""
set output ""
set noParam 0
set args $argv
if {[APSStrictParseArguments {input output noParam}]} {
    puts stderr "usage: sdds2csv -input <filename> -output <filename> '[-noParam [1|0]]"
    exit 1
}
if {([llength $input] == 0) || ([llength $output] == 0)} {
    puts stderr "usage: sdds2csv -input <filename> -output <filename>"
    exit 1
}

Convert -sddsinput $input -csvoutput $output -noParam $noParam
