Posted to tcl by patthoyts at Mon May 19 21:25:51 GMT 2008view raw

  1. proc ::tcl::base64chan {base cmd args} {
  2. switch -exact -- $cmd {
  3. initialize {
  4. foreach {chan mode} $args break
  5. return [list initialize finalize watch read write]
  6. }
  7. finalize {
  8. foreach chan $args break
  9. return {}
  10. }
  11. watch {
  12. foreach {chan event} $args break
  13. return {}
  14. }
  15. read {
  16. foreach {chan count} $args break
  17. set data [read $base $count]
  18. return [binary decode base64 $data]
  19. }
  20. write {
  21. foreach {chan data} $args break
  22. puts -nonewline $base [binary encode base64 $data]
  23. return [string length $data]
  24. }
  25. seek -
  26. configure -
  27. cget -
  28. cgetall -
  29. blocking -
  30. default {
  31. return -code error "method \"$cmd\" not implemented"
  32. }
  33. }
  34. }
  35.  
  36. proc Test {filename {chunk 4096}} {
  37. set r [open $filename rb]
  38. set w [open [file root $filename].b64 w]
  39. set e [chan create {write} [list ::tcl::base64chan $w]]
  40. while {![eof $r]} {
  41. set data [read $r $chunk]
  42. puts -nonewline $e $data
  43. }
  44. close $r
  45. close $e
  46. close $w
  47. }