Posted to tcl by patthoyts at Mon May 19 21:25:51 GMT 2008view raw
- proc ::tcl::base64chan {base cmd args} {
- switch -exact -- $cmd {
- initialize {
- foreach {chan mode} $args break
- return [list initialize finalize watch read write]
- }
- finalize {
- foreach chan $args break
- return {}
- }
- watch {
- foreach {chan event} $args break
- return {}
- }
- read {
- foreach {chan count} $args break
- set data [read $base $count]
- return [binary decode base64 $data]
- }
- write {
- foreach {chan data} $args break
- puts -nonewline $base [binary encode base64 $data]
- return [string length $data]
- }
- seek -
- configure -
- cget -
- cgetall -
- blocking -
- default {
- return -code error "method \"$cmd\" not implemented"
- }
- }
- }
- proc Test {filename {chunk 4096}} {
- set r [open $filename rb]
- set w [open [file root $filename].b64 w]
- set e [chan create {write} [list ::tcl::base64chan $w]]
- while {![eof $r]} {
- set data [read $r $chunk]
- puts -nonewline $e $data
- }
- close $r
- close $e
- close $w
- }