File: demo

package info (click to toggle)
tcltrf 2.1.4-dfsg-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 8,308 kB
  • ctags: 9,127
  • sloc: ansic: 72,769; tcl: 1,343; makefile: 222; sh: 89; exp: 22
file content (293 lines) | stat: -rwxr-xr-x 15,306 bytes parent folder | download | duplicates (7)
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
#!/usr/local/bin/wish
# -*- tcl -*-
# demo of trf features

wm withdraw .
wm title    . "Trf demonstration"

package require Trf

set fdata {
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
g2cOICAyfnCBwMQJkhc4Tv4EQePEAxUELkSsWLFCBQgCAAI8+MBixYoVK1asWLFixYoVK6yw
wgorrNBBIYLAcccdd9xxxx134KHIIopcAgAVO8DAgxFnOEEBCyussMIKK6ywwgospKAAAAAA
gEAKIqywwgorrLDCCiussMIKLYggAgspJADAKXH4McckCVDyxhx4SEKEFVbIEAYJJCxiBA5N
HMHCCiussMIKK6ywAgseSAAAAAAAkEAKIqywwgorMGHFMsTwUossOshyTC+wMHMKL80444Us
xzQTBC6VPINML0X8IMQLRiyRwxJRdOHECiussMIKK6ywAgsfVAAAAAAIIIEHLKwAhAis0AIN
NP68SBNNM6tUsUgTR6zQQQNsaKIHAwDAkQcccRBDTDTRHOMFEkLQAYMMP5CwRA4zoEFECyus
sMIKKoBgAAAAFOCBCkykYYUstBADTTOrTFHFDkessMIKK6zQAREFiALHJAeY8oYcbxxSiA66
7BLNMcNwgQMM5DjhhBM7eAEDDieAskQOL4ShRAAWJKBDGmmkkQYQXPDyCzTINJOMDE2AAQ88
7Nyywi3stHMLCx9QoQUIK6wAhjzzlHMMMtQU8cgP8EBCRAtltHDEERpEkQMXTvRwwyI5QOAB
C1KIkAYQLZSRxjfHNBNNL8a8csw5VtTQwwossMDCCius0EMaVpyzS/400ESDzCpTTFGME05w
scIKK6ywwgorrLDCCiuskEICAFCgQgcegBBCCDro4AIINXQADDHA9NMPML9EY8wvxkATzS+8
8AINL7aEo8AqwPBiiywQPADBBBJIMIEHHnjgAQgffPABCCCAkIIKA1DQwgorrMACCyuswAIL
K6ywwgorrLDCCiussMIKK6ywwgorrLDCCiussMIKK6ywwgossLCCCh300IMPPwBCD3oQBCHA
YAhAIEIRjHCCBoCAAixYwQpWsIIVrGAFK2DBB74AABV0oAMqAAACUqCCFaxgBStYwQpWIIIP
hMADLviACFZwBDDcwAhGCMMRnCCGKZwAA/4wwMASblCEIBRBA2M4wAdEsIIVrGAFK1jBClaw
ghWsYAUsCEEC+OACFbBgBStQAQj64IY35OEOd7jDHfDgByfUoQg3EAIJcpADIeAAB0X4wwHU
8AERsGAFK2BBChQAAAFQoAMsWMEKVrCCFaxgBStYwQpWIAIRqKEFK1iBCoBAhjnI4Q53uMMd
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
}


label .logo -anchor ne -bd 2 -relief raised \
	-image [image create photo -data $fdata]

entry  .input  -relief sunken -border 2 -textvariable input ;#-width 70
frame  .output -relief raised -border 2
button .quit   -text Quit -command exit
button .demo   -text Demo -command startAnimation

pack   .logo   -side left -expand 0 -fill both
pack   .input  -side top  -expand 1 -fill x -ipadx 1m -ipady 1m
pack   .output -side top  -expand 1 -fill both
pack   .quit   -side left -expand 0 -padx 2m -pady 2m
pack   .demo   -side left -expand 0 -padx 2m -pady 2m

foreach {r m t} {
    0    rep Input:
    1    zip {uuencode Zip:}
    2    hex Hex:
    3    b64 Base64:
    4    md5 {hex'd MD5 Hash:}
} {
    label  .output.l$m -anchor w -text $t
    label  .output.x$m -anchor e -text "__"
    entry  .output.$m  -relief sunken -border 2 -width 100 -textvariable out$m

    grid   .output.l$m -row $r -column 1 -sticky swen
    grid   .output.x$m -row $r -column 2 -sticky swen
    grid   .output.$m  -row $r -column 3 -sticky swen -ipadx 1m -ipady 1m
}


proc startAnimation {} {
    global input
    set    input ""

    animate 300 \
	    "Hello world, this is a demonstration \
of the Trf extension to tcl, a package for transforming \
data in various ways, as can be seen below"
}


proc animate {delay text} {
    global input

    set first [string range $text 0 0]
    set text  [string range $text 1 end]

    if {$first == {}} {
	return
    }

    after $delay [list animate $delay $text]

    append input $first
}


proc trf {args} {
    global input outhex outmd5 outb64 outzip outrep

    # do various transformations on the current input
    # executed for every change
    #
    # convert to HEX
    # convert into Base64
    # compute MD5 message digest (display in HEX)
    # compress using ZIP (display in UUencoded form)

    set temp [zip -mode compress -level 9 $input]
    set mtmp [md5 $input]

    set outrep $input
    set outhex [hex      -mode encode $input]
    set outb64 [base64   -mode encode $input]
    set outmd5 [hex      -mode encode $mtmp]
    set outzip [uuencode -mode encode $temp]

    set i  [string length $outrep]
    set zi [string length $temp]

    # count length of real hash and zip, not the encoded forms

    .output.xrep configure -text $i
    .output.xhex configure -text [string length $outhex]
    .output.xb64 configure -text [string length $outb64]
    .output.xmd5 configure -text [string length $mtmp]
    .output.xzip configure -text $zi

    if {$zi < $i} {
	# indicate real compression in interface
	.output.xzip configure -bg seagreen
	.output.xrep configure -bg [.output.xhex cget -bg]
    } else {
	.output.xzip configure -bg [.output.xhex cget -bg]
	.output.xrep configure -bg coral
    }
}


proc out {args} {
    catch {trf $args} msg
    if {$msg != {}} {puts "error > $msg"}
}

trace variable input w trf




focus        .input 
wm deiconify .