Posted to tcl by patthoyts at Mon May 19 21:25:51 GMT 2008view pretty
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 }