mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
64 lines
1.4 KiB
Tcl
Executable File
64 lines
1.4 KiB
Tcl
Executable File
#!/usr/bin/env tclsh
|
|
# http://wiki.tcl.tk/906
|
|
|
|
if {[llength $argv] < 1} {
|
|
puts "usage: owh ?init? body ?exit?
|
|
performs body (in Tcl) for each line (\$0) from stdin
|
|
owh: Ousterhout - Welch - Hobbs, to name a few"
|
|
exit -1
|
|
}
|
|
|
|
proc awksplit {text {split default}} {
|
|
set no 0
|
|
if {$split eq "default"} {
|
|
set t {}
|
|
foreach string [split $text] {
|
|
if {$string ne {}} {
|
|
lappend t $string
|
|
}
|
|
}
|
|
} else {
|
|
set t [list $text $split]
|
|
}
|
|
uplevel 1 [list set NF [llength $t]]
|
|
foreach i $t {uplevel 1 [list set [incr no] $i]}
|
|
uplevel 1 {set 0 {};trace variable 0 ru 0}
|
|
}
|
|
proc 0 {_name index op} {
|
|
switch $op {
|
|
r {
|
|
uplevel {
|
|
set 0 {}
|
|
for {set i 1} {$i <= $NF} {incr i} {lappend 0 [set $i]}
|
|
set 0 [join $0 $OFS]
|
|
}
|
|
}
|
|
u {rename 0 {} ;# leave no traces of the trace..}
|
|
}
|
|
}
|
|
|
|
proc print s {if {[catch {puts $s}]} exit} ;# good for broken pipe
|
|
|
|
set FS default
|
|
set OFS { }
|
|
|
|
if {[llength $argv] > 1} {
|
|
eval [lindex $argv 0]
|
|
set _body [lindex $argv 1] ;# strip outer braces
|
|
set _exit [lindex $argv 2]
|
|
} else {
|
|
set _body [lindex $argv 0] ;# strip outer braces
|
|
set _exit {}
|
|
}
|
|
|
|
set NR 1
|
|
while 1 {
|
|
gets stdin line
|
|
if {[eof stdin]} break
|
|
awksplit $line $FS
|
|
eval $_body
|
|
incr NR
|
|
}
|
|
set res [eval $_exit]
|
|
if {[string length $res]} {puts $res}
|