eolFix.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. ## Super aggressive EOL-fixer!
  2. ##
  3. ##  Will even understand screwed up ones like CRCRLF.
  4. ##  (found in bad CVS repositories, caused by spacey developers
  5. ##   abusing CVS)
  6. ##
  7. ##  davygrvy@pobox.com    3:41 PM 10/12/2001
  8. ##
  9. package provide EOL-fix 1.1
  10. namespace eval ::EOL {
  11.     variable outMode crlf
  12. }
  13. proc EOL::fix {filename {newfilename ""}} {
  14.     variable outMode
  15.     if {![file exists $filename]} { return }
  16.     puts "EOL Fixing: $filename"
  17.     file rename ${filename} ${filename}.o
  18.     set fhnd [open ${filename}.o r]
  19.     if {$newfilename != ""} {
  20. set newfhnd [open ${newfilename} w]
  21.     } else {
  22. set newfhnd [open ${filename} w]
  23.     }
  24.     fconfigure $newfhnd -translation [list auto $outMode]
  25.     seek $fhnd 0 end
  26.     set theEnd [tell $fhnd]
  27.     seek $fhnd 0 start
  28.     fconfigure $fhnd -translation binary -buffersize $theEnd
  29.     set rawFile [read $fhnd $theEnd]
  30.     close $fhnd
  31.     regsub -all {(r)|(r){1,2}(n)} $rawFile "n" rawFile
  32.     set lineList [split $rawFile n]
  33.     foreach line $lineList {
  34. puts $newfhnd $line
  35.     }
  36.     close $newfhnd
  37.     file delete ${filename}.o
  38. }
  39. proc EOL::fixall {args} {
  40.     if {[llength $args] == 0} {
  41. puts stderr "no files to fix"
  42. exit 1
  43.     } else {
  44. set cmd [lreplace $args -1 -1 glob -nocomplain]
  45.     }
  46.     foreach f [eval $cmd] {
  47. if {[file isfile $f]} {fix $f}
  48.     }
  49. }
  50. if {$tcl_interactive == 0 && $argc > 0} {
  51.     if {[string index [lindex $argv 0] 0] == "-"} {
  52. switch -- [lindex $argv 0] {
  53.     -cr   { set ::EOL::outMode cr }
  54.     -crlf { set ::EOL::outMode crlf }
  55.     -lf   { set ::EOL::outMode lf }
  56.     default { puts stderr "improper mode switch" ; exit 1 }
  57.         }
  58. set argv [lrange $argv 1 end]
  59.     }
  60.     eval EOL::fixall $argv
  61. } else {
  62.     return
  63. }