sl@0: ## Super aggressive EOL-fixer! sl@0: ## sl@0: ## Will even understand screwed up ones like CRCRLF. sl@0: ## (found in bad CVS repositories, caused by spacey developers sl@0: ## abusing CVS) sl@0: ## sl@0: ## davygrvy@pobox.com 3:41 PM 10/12/2001 sl@0: ## sl@0: sl@0: package provide EOL-fix 1.1 sl@0: sl@0: namespace eval ::EOL { sl@0: variable outMode crlf sl@0: } sl@0: sl@0: proc EOL::fix {filename {newfilename ""}} { sl@0: variable outMode sl@0: sl@0: if {![file exists $filename]} { return } sl@0: puts "EOL Fixing: $filename" sl@0: sl@0: file rename ${filename} ${filename}.o sl@0: set fhnd [open ${filename}.o r] sl@0: sl@0: if {$newfilename != ""} { sl@0: set newfhnd [open ${newfilename} w] sl@0: } else { sl@0: set newfhnd [open ${filename} w] sl@0: } sl@0: sl@0: fconfigure $newfhnd -translation [list auto $outMode] sl@0: seek $fhnd 0 end sl@0: set theEnd [tell $fhnd] sl@0: seek $fhnd 0 start sl@0: sl@0: fconfigure $fhnd -translation binary -buffersize $theEnd sl@0: set rawFile [read $fhnd $theEnd] sl@0: close $fhnd sl@0: sl@0: regsub -all {(\r)|(\r){1,2}(\n)} $rawFile "\n" rawFile sl@0: sl@0: set lineList [split $rawFile \n] sl@0: sl@0: foreach line $lineList { sl@0: puts $newfhnd $line sl@0: } sl@0: sl@0: close $newfhnd sl@0: file delete ${filename}.o sl@0: } sl@0: sl@0: proc EOL::fixall {args} { sl@0: if {[llength $args] == 0} { sl@0: puts stderr "no files to fix" sl@0: exit 1 sl@0: } else { sl@0: set cmd [lreplace $args -1 -1 glob -nocomplain] sl@0: } sl@0: sl@0: foreach f [eval $cmd] { sl@0: if {[file isfile $f]} {fix $f} sl@0: } sl@0: } sl@0: sl@0: if {$tcl_interactive == 0 && $argc > 0} { sl@0: if {[string index [lindex $argv 0] 0] == "-"} { sl@0: switch -- [lindex $argv 0] { sl@0: -cr { set ::EOL::outMode cr } sl@0: -crlf { set ::EOL::outMode crlf } sl@0: -lf { set ::EOL::outMode lf } sl@0: default { puts stderr "improper mode switch" ; exit 1 } sl@0: } sl@0: set argv [lrange $argv 1 end] sl@0: } sl@0: eval EOL::fixall $argv sl@0: } else { sl@0: return sl@0: }