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
}