You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.1 KiB
84 lines
2.1 KiB
10 months ago
|
#A basic utility script to cat a file to another with optional string prefix and suffix
|
||
|
#does not interpret escapes e.g \n in arguments - review
|
||
|
#Used for example by zig.build or other systems to avoid problems with redirecting echo/cat etc
|
||
|
#2024 - zig.build.addSystemCommand doesn't seem to support pipelines
|
||
|
|
||
|
#padding
|
||
|
#padding
|
||
|
#padding
|
||
|
#padding
|
||
|
#padding
|
||
|
#padding
|
||
|
#padding
|
||
|
|
||
|
set usage "usage: interpreter scriptname -startnl 0|1 -prefix <string> -prefixnl 0|1 -suffix <string> -suffixnl 0|1 -input <filename> -inputnl 0|1 -output <filename>"
|
||
|
set defaults [dict create\
|
||
|
-startnl 0\
|
||
|
-crlf 0\
|
||
|
-prefix ""\
|
||
|
-prefixnl 0\
|
||
|
-suffix ""\
|
||
|
-suffixnl 0\
|
||
|
-input ""\
|
||
|
-inputnl 0\
|
||
|
-output \uFFEF\
|
||
|
]
|
||
|
if {"windows" eq $::tcl_platform(platform)} {
|
||
|
package require punk::winrun
|
||
|
package require twapi
|
||
|
set rawcmdline [twapi::get_process_commandline [pid]]
|
||
|
set allargs [punk::winrun::unquote_wintcl $rawcmdline]
|
||
|
#first 2 args are the interpreter and the script
|
||
|
set scriptargs [lrange $allargs 2 end]
|
||
|
} else {
|
||
|
set scriptargs $::argv
|
||
|
}
|
||
|
#puts stdout "scriptargs:$scriptargs"
|
||
|
if {[llength $scriptargs] % 2 != 0} {
|
||
|
puts stderr $usage
|
||
|
exit 1
|
||
|
}
|
||
|
set opts [dict merge $defaults $scriptargs]
|
||
|
#puts stdout "opts:$opts"
|
||
|
if {[dict get $opts -output] eq "\uFFEF"} {
|
||
|
puts stderr $usage
|
||
|
exit 2
|
||
|
}
|
||
|
set infile [dict get $opts -input]
|
||
|
set filedata ""
|
||
|
if {$infile ne ""} {
|
||
|
if {![file exists $infile]} {
|
||
|
puts stderr "Unable to read input file '$infile'"
|
||
|
exit 3
|
||
|
}
|
||
|
set fd [open $infile r]
|
||
|
set filedata [read $fd]
|
||
|
close $fd
|
||
|
}
|
||
|
set startnl ""
|
||
|
set prefixnl ""
|
||
|
set suffixnl ""
|
||
|
set inputnl ""
|
||
|
if {[dict get $opts -startnl]} {
|
||
|
set startnl \n
|
||
|
}
|
||
|
if {[dict get $opts -prefixnl]} {
|
||
|
set prefixnl \n
|
||
|
}
|
||
|
if {[dict get $opts -suffixnl]} {
|
||
|
set suffixnl \n
|
||
|
}
|
||
|
if {[dict get $opts -inputnl]} {
|
||
|
set inputnl \n
|
||
|
}
|
||
|
set data "$startnl[dict get $opts -prefix]$prefixnl$filedata$inputnl[dict get $opts -suffix]$suffixnl"
|
||
|
set fdout [open [dict get $opts -output] w]
|
||
|
if {[dict get $opts -crlf] == 0} {
|
||
|
chan configure $fdout -translation binary
|
||
|
}
|
||
|
puts -nonewline $fdout $data
|
||
|
close $fdout
|
||
|
catch {puts stdout ok}
|
||
|
exit 0
|
||
|
|