1#!/usr/local/bin/wish 2# -*- tcl -*- 3# demo of trf features 4 5wm withdraw . 6wm title . "Trf demonstration" 7 8package require Trf 9 10set fdata { 11R0lGODlhPABaAPcAAP////76+vz09v7p6/3W1/3M0fzGyfu1uPmstfiVmPiJi/R2ePRpdfZn 12a/FZZPFUWPNMVe06Q+02O+wsNO0jKe5FS/Xx8V10ZlFXS6GjnhQTD0dVSPmlp+oZHuoVGukR 13FekNEugGC+siJikuHSk9Md3h3muVqURJPHqAdOcFC+odI+ojKOokKesjKOcLEhk2KihENmJo 14XW8wLQsoG0hjUfgXGfoNExcnHThGOCg3Kv0HB7IVF0ZLQ/QeI1NGN7IrLf4aHAQKBjVQPZVI 15V/4kJgACAjlURvQjKJEuKyRoU3FNWDc9M/0dJPwaJ/4kKnQTFhJJNBpGN6lCTwUWFfFaZgYo 16JM4rMAcRCvqXpylSUPm7wjQ4LOUlKokpHhYpJe9JVukcKU02LYYPEo5qdv3Z6fMhJScpI04V 17FM0bJ/8UFfY8S7Kn00Y6qzEvo9LF8gAGigAJlFJTkQAbkwAaoxg4OM8VGIaF0AAdlAAcmwIU 18jFMVbwo2KPvt9v/i2RMek1w4Q7A2Sv8jGVllw9jo9lZew/9JSQojm/OuzZWw12wmZREraDpK 19QvF4ilBKtAohowkVKv0yMdm+7SQRh1QHU2d30gALoKUXVdM/YD5HGP+hnQAVlUsnjnddtsxn 20k8+DuiwPDjYsJM4uRTRKr44TULKy57BLhneX3G6kv6vT4hFqkQcZbyZmhzRxlFVnh5nS5i6U 21xhlFVy8mXnFXcAeKtRiDqw6GrhN3rukVKwMVWEsoHYlNZBiKtip3nCJSasDS3Sp9pRp7pSEA 22X3u3zkdtjyaDq1IZIy97pyeItDOSuRFTbe5WWht1miNkezGJtA0pNhdPjy2CqzCDrDOKqSlW 23cRE0RekiKOYVF0eMshOTx4o4SAOVxTQZJBZgffl8hOnS/1NacBmi1I9wiZAYLjwyn2pIPiBQ 24yLUZKQ9FVGlnhvltEvuQCHSjYO43I//WAP/vAOoMK/ZYGbGcBv/IANilE/+vApCiWeRfJBB6 25wjWVn/9AA6hlRGhnbWgdIdePlp2tvgAAACH+ISAgSW1wb3J0ZWQgZnJvbSBHSUYgaW1hZ2U6 26IGJnLmdpZgAsAAAAADwAWgDH/////vr6/PT2/unr/dbX/czR/MbJ+7W4+ay1+JWY+ImL9HZ4 279Gl19mdr8Vlk8VRY80xV7TpD7TY77Cw07SMp7kVL9fHxXXRmUVdLoaOeFBMPR1VI+aWn6hke 286hUa6REV6Q0S6AYL6yImKS4dKT0x3eHea5WpREk8eoB05wUL6h0j6iMo6iQp6yMo5wsSGTYq 29KEQ2YmhdbzAtCygbSGNR+BcZ+g0TFycdOEY4KDcq/QcHshUXRktD9B4jU0Y3sist/hocBAoG 30NVA9lUhX/iQmAAICOVRG9CMokS4rJGhTcU1YNz0z/R0k/Bon/iQqdBMWEkk0GkY3qUJPBRYV 318VpmBigkziswBxEK+penKVJQ+bvCNDgs5SUqiSkeFikl70lW6RwpTTYthg8Sjmp2/dnp8yEl 32JykjThUUzRsn/xQV9jxLsqfTRjqrMS+j0sXyAAaKAAmUUlORABuTABqjGDg4zxUYhoXQAB2U 33ABybAhSMUxVvCjYo++32/+LZEx6TXDhDsDZK/yMZWWXD2Oj2Vl7D/0lJCiOb867NlbDXbCZl 34EStoOkpC8XiKUEq0CiGjCRUq/TIx2b7tJBGHVAdTZ3fSAAugpRdV0z9gPkcY/6GdABWVSyeO 35d122zGeTz4O6LA8ONiwkzi5FNEqvjhNQsrLnsEuGd5fcbqS/q9PiEWqRBxlvJmaHNHGUVWeH 36mdLmLpTGGUVXLyZecVdwB4q1GIOrDoauE3eu6RUrAxVYSygdiU1kGIq2KnecIlJqwNLdKn2l 37GnulIQBfe7fOR22PJoOrUhkjL3unJ4i0M5K5EVNt7lZaG3WaI2R7MYm0DSk2F0+PLYKrMIOs 38M4qpKVZxETRF6SIo5hUXR4yyE5PHijhIA5XFNBkkFmB9+XyE6dL/U1pwGaLUj3CJkBguPDKf 39akg+IFDItRkpD0VUaWeG+W0S+5AIdKNg7jcj/9YA/+8A6gwr9lgZsZwG/8gA2KUT/68CkKJZ 405F8kEHrCNZWf/0ADqGVEaGdtaB0h14+Wna2+AAAACP4AAQAAAAAAAAAAAAQIIECAgAEDCBQw 41cABBggQKFjBo4OABhAgSJlCgUEEBAQAAAAAAAAAAAAAAAACwcAGDBQAAMmjYkAFChxYrVqxY 42sWLFihUrVqzwMAFAAQ8rVITAAgAAARUqVqxYsWLFihUrVqxYsaLFkSMrnOwogiOLDyZMNNA4 43AQMHDhwnFIBYsWLFihUrVqxYsWKFigkNPKRIAMCFihUrVqxY0cHFAQBu2rx58wZOHCtMjjhx 44UsTLiQ04NuQoUgSNEycsWHiQIKCABxUsVqxYsWLFihUrVqxYoUJFgAgeVqxQ8WEAoTd37ty5 45g2cOICAyfnCBwMQJkhc4Tv4EQePEAxUELkSsWLFCBQgCAAI8+MBixYoVK1asWLFixYoVK6yw 46wgorrNBBIYLAcccdd9xxxx134KHIIopcAgAVO8DAgxFnOEEBCyussMIKK6ywwgospKAAAAAA 47gEAKIqywwgorrLDCCiussMIKLYggAgspJADAKXH4McckCVDyxhx4SEKEFVbIEAYJJCxiBA5N 48HMHCCiussMIKK6ywAgseSAAAAAAAkEAKIqywwgorMGHFMsTwUossOshyTC+wMHMKL80444Us 49xzQTBC6VPINML0X8IMQLRiyRwxJRdOHECiussMIKK6ywAgsfVAAAAAAIIIEHLKwAhAis0AIN 50NP68SBNNM6tUsUgTR6zQQQNsaKIHAwDAkQcccRBDTDTRHOMFEkLQAYMMP5CwRA4zoEFECyus 51sMIKKoBgAAAAFOCBCkykYYUstBADTTOrTFHFDkessMIKK6zQAREFiALHJAeY8oYcbxxSiA66 527BLNMcNwgQMM5DjhhBM7eAEDDieAskQOL4ShRAAWJKBDGmmkkQYQXPDyCzTINJOMDE2AAQ88 537Nyywi3stHMLCx9QoQUIK6wAhjzzlHMMMtQU8cgP8EBCRAtltHDEERpEkQMXTvRwwyI5QOAB 54C1KIkAYQLZSRxjfHNBNNL8a8csw5VtTQwwossMDCCius0EMaVpyzS/400ESDzCpTTFGME05w 55scIKK6ywwgorrLDCCiuskEICAFCgQgcegBBCCDro4AIINXQADDHA9NMPML9EY8wvxkATzS+8 568AINL7aEo8AqwPBiiywQPADBBBJIMIEHHnjgAQgffPABCCCAkIIKA1DQwgorrMACCyuswAIL 57K6ywwgorrLDCCiussMIKK6ywwgorrLDCCiussMIKK6ywwgossLCCCh300IMPPwBCD3oQBCHA 58YAhAIEIRjHCCBoCAAixYwQpWsIIVrGAFK2DBB74AABV0oAMqAAACUqCCFaxgBStYwQpWIIIP 59hMADLviACFZwBDDcwAhGCMMRnCCGKZwAA/4wwMASblCEIBRBA2M4wAdEsIIVrGAFK1jBClaw 60ghWsYAUsCEEC+OACFbBgBStQAQj64IY35OEOd7jDHfDgByfUoQg3EAIJcpADIeAAB0X4wwHU 618AERsGAFK2BBChQAAAFQoAMsWMEKVrCCFaxgBStYwQpWIAIRqKEFK1iBCoBAhjnI4Q53uMMd 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 96EuABLMACFNACQNADw0AMxhANzfALy/ADTdACIqACHhAIiTAHwUAFAQAHciAJo+AHyxAN0NAM 97ODACXWANXRALtfANI/7AAziQBV3ABEewAiuwAiIQAgcAAAAwAB6gBKkwC8cADcYQDcYADdFg 98DLRADmmwAiuwAivwAYVACm+gCXNgCQPQCHmAB3ngBwRQBr9ADNBwDMMABGkACnvgBblwBD9A 99AjCwBGYQBTIABk4QAgoAAABwAB+gAizAAivQA0DwC8RgDMbwCr/QAWWwAiuwAiuwAiuwAh4A 100CZ4wDg3gBm+AB6UACR1QBkDwC8fQDMxADdRADVUQBFPQAaCQAzDwAz8QBVswAmGwATiQA1uQ 101ANmgDdowC7twDMQADdBgDF7QC8RwBD3AAiuwAiuwAitwC+zQDiwABiGgBYwQAizAAisABv49 1028AvHcAyw4A6B0AMi4AQysAdhcARH4ARi8AIkEAZEwARBAANLsAAgsAIrsAIrIAI2oAu70Ayr 103sArU4Az20A63wAXqAAYscAvs0A63wAIq0AFkEAEewALvoA71YAvG0AzNgAyr4AxBMAVgcAQr 104sAJH0AIvAAU/cAROIAZVYAYx0AAgUAZDsAvasAvDMAS6QAvG0Ayw8ALMkAyhkAZgQAEsAAa3 1058A63wAIroAIigAVgkAahsAvHgAy9UATF0ARN0ARMwAQtwAIrsAIrsAIrsAItsAItQAQ7EAMC 106AAEdQAEisAIswAJlkAb7gA3HcAzGYAzRQAe9QA2rAA7TkA1WQP4ETAAEVjAEXpAKx9AM0YAM 107vWAOrbALx0AHQcAPTkABK7ACK7ACK7ACK7ACK7ACK8ACKaAAADABLUABK7ACPfAN2jAMRMAE 108IpAGUrAL0AANxgAN0AAN0dAMv2AMzRAN0QAN0dAMxiALu0AMv/ALvCACQFAGQFAGK8ACLMAC 109LLACK7ACK7ACK7ACK8ACIKAMAnAABHAAB8ABCZAAC7AADfAAFSABEtABHeABHuABH/ABIAAC 110IQACIPABHuABHdABIiACIiACHgACItAABQAAAAAAAAAAAAAAAAAAAAAAI0ACJQAAAmACGnAC 111KCACIiACKyACIiACLMACLMACLMACFP7AAizAAiLAAizAAiuwAiuwAivAAizAAizAAiuwAiuw 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 144axatWi4yubIFK4iqWwBewQqCZw4uH7k+ff76dOYEjhddiKxYsWLFihUrVrBgEWIBAAAAACAI 145sWLFihUrRDABkgZIICCAav36tWqBK2C9ggRTIwyYFw134HBClOoThSNHSOSIAqpJixUrVqxY 146sWIFCxYhGAAAAABAghQsVqxYsQKIklm0avHiAohljuEllQzWAIaXID5x4JhjNMBljjx4QaaK 147HZxAYoMctsABBzSOWGGFFVZYYYUVWGABBGUAAAAAABYIgYUVVlhhBRHSkKUWY3ipBRApdmmG 148F16IgSaaV145pplmssAFD2mQyWILGGAgwYwRRsgBhjCYOGKFFVZYYYUVVmDBAwkAAAAAABZw 149gQURegACCCB6SP5Dll2iWYWXX6KJBppooImmGWmiiSaaaJppJhpkkvlEhjOs4eIabLKAgQcY 150kHBihRVWWGGFFVZgoQMPAAAAgAAecKEMFXiZpZZZfvlBB11oiSYaaJrhZRlqpOjkjUomYcSV 151VKSJJppojhlGBF2wwSYLG5CAgYQcvEDCiRVWWGGFFVZgQYUPBAAAAAEe+KAFIERghZZofuEF 152GGCgiSYabpLJJo0egOjGjzkm6YaPN+B4hhhooIGGmGaW+eEHGJZ4gQQccPBCBidaWGGFFVZY 153QYUPBgAAAAEk8ICFFVZIowxWaIEmmmiiiQabaSZgYgUKOoCkkUr0oCKANzTxg4gxjv6Jphlj 154cMgBhjB+AKIOGEZYwogwnDhihRVWWEEEFwoAAAABjvAAiDSAACINHYagBZpmpqHGDCbKWKGD 155LxjQYZQ54FADADnyMASPN0SRBppmmCnmD1ZmAUcaHszgYQkcYJCBiSNWWGGFEA4AAIABbBhC 156m12OOWaXWn4hBhpjjgGGiR5WWEGEEAwYRBRNNEEDgHHeuOOONw4JpxZojGlmF2OkSCOMF7wI 157I4ctliBhDySccEKEFBIAAIACbKjBClmA2YUYaKKJphloUsmGiRVWWGGFamxAgJI3/JikAEre 158uAMOTjLRYZhdoNllCB1k2GOPMFhwAhNkkAMS4CAHXvCCDP500A0AAKAAHVDBClrAhDRwgRfQ 159iAYskkEMJxxhBStYwQpWIIIPQOIQ5QhGJkjxhjw0IgEfSAMgdkEMZKziCiO4gTl2IA4nIGEP 160QjDDC3KwBBLgAAY3eEEMDvABFYgACEBIQxp4AY1mNGMV56hBGVawghWsYAUrWIEIagAGPVyC 161D5WQRCBqsIIy1IAYxzBGM5Dxile8Yha62MELohAGJjjhCRvYAg5wsAUcLIEDNhjCMHaxi2Mc 162oxnRaAYzqOGMHpRhBStYwQpWsAIWpEMdLQCDBwZQiBq0gAUs6IEKfnGMZqxiHYCoBhDSsAMo 163REEGTHBCD2YghBeY4wc5wMEWEv7wg2/IQhayGAYtfgENaEDjFdgYAhBWcItbgGEFKwADO9px 164ixWEAAtYCAELVvCOdMDDGMcwhjPi4YQm9KAJLADFD5ywAic8IQpRQIITjhCEHGyhGyBYAQtE 165wAUg9IAXv2jGKuiQjGk0gR7wgEc7VsCCW7CjHbdYQQcmQIYOqGAF76BHPbARjWaswhlBmMII 166unCEI6xgBUcowxSygAQnHKEHN8DBFhYAAhasYAU9SIMVfnGMaETjEdO4Rz3acYt3gIEFLLgF 167O9pxCzCsIAQIYAQIVtADdeDDFsc4hi1s8YpmpMIZPTjCClbQAifgIAxMOIITnjAFM2SgAR8o 168AxCs0P4KbGBjF8T4RTSa0YxnUAMD6UgHO27BAi6kQx3wWMEKOhCBAnRABUBoxS6asQsZ5EMd 169+YCHPgABhBasYAUrWMERWtACFhyBC1B4QQmU4QEuzAIYsuACEGxQBmD8ohmr6IUzaLGLUACB 170AixgAQu4wAIWrEAEKviCE+pAi2NEoxmrCMIUiuGEI4hABCtYwQpWsIIVrGAFK1hBC1pggwMA 171AAIeEAETyrACFrSgB0DYxzGiEY1mNCMa1EhGMobgBCAwoQxHOAITgFCDISSDFs1oBjF+QYxX 1729CIIVSjGEVqwghWsYAUrWMEKVrCCFaxgBSlIAAAioAIWrGAFKxBBGgCxC/5sEKMVwIhGNJrR 173C1i8YhVTSAU3jOGMXqSCGssgRjOgAQ1enOMHQNAFMbBBDTE4YQUrWMEKVrCCFaxgBStYwQpY 174EAIGAEACKljBClbQAyC0QhutAAIQ0gCIX0AjGtGIRjSMEY1orIIOvICGMZoRjWgQgxi/+MUv 175aqGLNACBC7oQQRlWsIIVrGAFK1jBClawghWsgAUgUIYAKNACFrCAAkyQhSyYUAMVdCANrdjF 176MVaxCl4YIxrRiAY0ohGNaEDDGNBYxSrQoARg/IIXtciGDj7wAQ94wAMd6IAKOqACFahABSoQ 177gQpEAIIKCIACE6iAMhjQDQVwAAEHIAAB/PGLX0CcwgIWuAY0jMELXvDCGMZgxSmuAQ1e8AIR 178APCFMXghDV8EIAACEMAABDCAAQxgAAMgAAEIUAADHMAABzhAAAICADs= 179} 180 181 182label .logo -anchor ne -bd 2 -relief raised \ 183 -image [image create photo -data $fdata] 184 185entry .input -relief sunken -border 2 -textvariable input ;#-width 70 186frame .output -relief raised -border 2 187button .quit -text Quit -command exit 188button .demo -text Demo -command startAnimation 189 190pack .logo -side left -expand 0 -fill both 191pack .input -side top -expand 1 -fill x -ipadx 1m -ipady 1m 192pack .output -side top -expand 1 -fill both 193pack .quit -side left -expand 0 -padx 2m -pady 2m 194pack .demo -side left -expand 0 -padx 2m -pady 2m 195 196foreach {r m t} { 197 0 rep Input: 198 1 zip {uuencode Zip:} 199 2 hex Hex: 200 3 b64 Base64: 201 4 md5 {hex'd MD5 Hash:} 202} { 203 label .output.l$m -anchor w -text $t 204 label .output.x$m -anchor e -text "__" 205 entry .output.$m -relief sunken -border 2 -width 100 -textvariable out$m 206 207 grid .output.l$m -row $r -column 1 -sticky swen 208 grid .output.x$m -row $r -column 2 -sticky swen 209 grid .output.$m -row $r -column 3 -sticky swen -ipadx 1m -ipady 1m 210} 211 212 213proc startAnimation {} { 214 global input 215 set input "" 216 217 animate 300 \ 218 "Hello world, this is a demonstration \ 219of the Trf extension to tcl, a package for transforming \ 220data in various ways, as can be seen below" 221} 222 223 224proc animate {delay text} { 225 global input 226 227 set first [string range $text 0 0] 228 set text [string range $text 1 end] 229 230 if {$first == {}} { 231 return 232 } 233 234 after $delay [list animate $delay $text] 235 236 append input $first 237} 238 239 240proc trf {args} { 241 global input outhex outmd5 outb64 outzip outrep 242 243 # do various transformations on the current input 244 # executed for every change 245 # 246 # convert to HEX 247 # convert into Base64 248 # compute MD5 message digest (display in HEX) 249 # compress using ZIP (display in UUencoded form) 250 251 set temp [zip -mode compress -level 9 $input] 252 set mtmp [md5 $input] 253 254 set outrep $input 255 set outhex [hex -mode encode $input] 256 set outb64 [base64 -mode encode $input] 257 set outmd5 [hex -mode encode $mtmp] 258 set outzip [uuencode -mode encode $temp] 259 260 set i [string length $outrep] 261 set zi [string length $temp] 262 263 # count length of real hash and zip, not the encoded forms 264 265 .output.xrep configure -text $i 266 .output.xhex configure -text [string length $outhex] 267 .output.xb64 configure -text [string length $outb64] 268 .output.xmd5 configure -text [string length $mtmp] 269 .output.xzip configure -text $zi 270 271 if {$zi < $i} { 272 # indicate real compression in interface 273 .output.xzip configure -bg seagreen 274 .output.xrep configure -bg [.output.xhex cget -bg] 275 } else { 276 .output.xzip configure -bg [.output.xhex cget -bg] 277 .output.xrep configure -bg coral 278 } 279} 280 281 282proc out {args} { 283 catch {trf $args} msg 284 if {$msg != {}} {puts "error > $msg"} 285} 286 287trace variable input w trf 288 289 290 291 292focus .input 293wm deiconify . 294