File: export.tcl

package info (click to toggle)
dotfile 1%3A2.4.1-4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 5,400 kB
  • ctags: 517
  • sloc: tcl: 14,083; sh: 861; makefile: 163; lisp: 18; ansic: 7
file content (169 lines) | stat: -rw-r--r-- 5,338 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
######################################################################
### This function export the setup into an export file
######################################################################
proc export {filename} {
  global __OUTPUT __progList __hash __language
  startBusy "$__language(export,3)..."
  set __OUTPUT [open $filename w]

  set count [llength $__progList]
  timeWindow $count $__language(export,3) "$__language(export,2)\n$filename"
  
  foreach function $__progList {
    puts $__OUTPUT $__hash
    puts $__OUTPUT "\#\#\# $function"
    puts $__OUTPUT $__hash
    puts $__OUTPUT "PAGE $function"
    export_func $function top 2 __$function ""
    incrTimeWindow
  }
  close $__OUTPUT
  destroyTimeWindow
  endBusy
}

######################################################################
### This function export variables to a given function, from a given
### top. 'level' indicated the indentation level in the file
######################################################################
proc export_func {function top level prefix defaultVal} {
  global __children __widgetArgs __OUTPUT
  set index 0
  foreach child $__children(${function}__$top) {
    set type $__widgetArgs(${function}__${child}__type)

    if {$type == "line" || $type == "header"} continue
    set subCount [noOfVariableChildren $function $child]
    if {$subCount != 1} {
      set default [lrange $defaultVal $index [expr $index+ $subCount -1]]
    } else {
      set default [lindex $defaultVal $index]
    }
    incr index $subCount
    if {$default == ""} {
      set default $__widgetArgs(${function}__${child}__default)
    }

    if {!$__widgetArgs(${function}__${child}__export)} continue

    switch $type {
      checkbox -
      entry -
      int -
      float -
      textbox -
      menu  -
      combobox -
      label -
      command {
        upvar \#0 ${prefix}_$child variable
        if {$variable != $default} {
          puts $__OUTPUT \
              "[space $level][upCase $type] $child \"[escape* $variable]\""
        }
      }
      radio {
        set entries $__widgetArgs(${function}__${child}__entries)
        upvar \#0 ${prefix}_$child variable
        if {[lindex $entries $variable] != $default} {
          set txt [lindex $entries $variable]
          puts $__OUTPUT \
              "[space $level][upCase $type] $child \"[escape* $txt]\""
        }
      }
      listbox {
        upvar \#0 ${prefix}_$child variable
        set list ""
        foreach elm $variable {
          set txt \
              [lindex $__widgetArgs(${function}__${child}__entries) $elm]
          lappend list [escape* $txt]
        }
        puts $__OUTPUT \
            "[space $level][upCase $type] $child \"$list\""
      }
      extentry {
        export_extentry $function $level $prefix $child ""
      }
      frame -
      window {
        export_func $function $child $level $prefix $default
      }
      fillout {
        export_fillout $function $level $prefix $child
      }
    }
  }
}

######################################################################
### This function exports an ExtenTry
######################################################################
proc export_extentry {function level prefix name default} {
  global __widgetArgs __scrollBar __OUTPUT

  set count [lindex $__scrollBar(${prefix}_$name) 1]
  if {$count != 0} {
    puts $__OUTPUT "[space $level]EXTENTRY $name"
    for {set i 0} {$i < $count} {incr i} {
      puts $__OUTPUT "[space $level]\{"
      export_func $function $name [expr $level+2] ${prefix}_$name$i \
          [lindex $default $i]
      puts $__OUTPUT "[space $level]\}"
    }
  }
}

######################################################################
### This function export a FillOut
######################################################################
proc export_fillout {function level prefix name} {
  global __fillList __OUTPUT

  puts $__OUTPUT "[space $level]FILLOUT $name \{"

  set last -1
  incr level 2
  upvar \#0 ${prefix}_$name variable
  foreach filloutelm $__fillList(${prefix}_$name) {
    set start [lindex $filloutelm 0]
    set end [lindex $filloutelm 1]
    set elmName [lindex $filloutelm 2]
    set counter [lindex $filloutelm 3]
    if {$last < $start-1} {
      set text [string range $variable [expr $last+1] [expr $start-1]]
      puts $__OUTPUT \
          "[space $level]TEXT \"[escape* $text]\""
    }
    set last $end
    if {$counter == -1} {
      puts $__OUTPUT "[space $level]FILLOUTELM $elmName {}"
    } else {
      puts $__OUTPUT "[space $level]FILLOUTELM $elmName \{"
      export_func $function $elmName [expr $level+2] \
          ${prefix}_${name}_$counter ""
      puts $__OUTPUT "[space $level]\}"
    }
  }
  
  if {$last < [string length $variable]} {
    puts $__OUTPUT \
        "[space $level]TEXT \"[escape* [string range $variable [expr $last+1] end]]\""
  }

  puts $__OUTPUT "[space [expr $level-2]]\}"
}

############################################################
# This function escapes every control chars for the
# export file
############################################################  
proc escape* {string} {
  global tcl_version
  if {$tcl_version < 8.1} {
    regsub -all {[\"{}]} $string \\\\\\0 result
  } else {
    regsub -all {[\\"\{\}]} $string \\\\\\0 result
  }
  return $result
}