File: subst.tcl

package info (click to toggle)
sauce 0.9.0%2Bnmu3
  • links: PTS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch
  • size: 480 kB
  • ctags: 197
  • sloc: tcl: 4,363; sh: 186; makefile: 129
file content (74 lines) | stat: -rw-r--r-- 2,136 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
########### subst.tcl
# Run with two args: settingsfile, filename.ext
# Then copies input file <filename>.<ext> to output file <filename>,
# making substitutions as specified in <settingsfile>
#
# This file is part of SAUCE, a very picky anti-spam receiver-SMTP.
# SAUCE is Copyright (C) 1997-2003 Ian Jackson
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
#
# $Id: subst.tcl,v 1.8 2003/06/15 15:46:40 ian Exp $

source instlib.tcl

if {[llength $argv] != 2} { error "need exactly two args" }
source [lindex $argv 0]
set infilename [lindex $argv 1]
regexp {^(.+)\.([^.]+)$} $infilename dummy filename ext

switch -exact $ext {
    tcl {
	set hashpling 1
	set removeset 1
    }
    in {
	set hashpling 0
	set removeset 0
    }
    default {
	error $ext
    }
}

set in [open $infilename r]

set mode 0666
if {[file executable $infilename]} { set mode 0777 }

set out [open $filename.new w $mode]
set line1 1

while {[gets $in line] >= 0} {
    if {$line1 && $hashpling && [regexp {^\#\!.*tclsh} $line]} {
	set line "#! $_tclsh"
    } elseif {$removeset && [regexp {^set[ \t]+\@\@\@[a-z_]+\??\@\@\@[ \t]} $line]} {
	continue
    } else {
	while {[regexp {^(.*)\$\{\@\@\@([a-z_]+)(\??)\@\@\@\}(.*)$} \
		$line all lhs vn allow0 rhs]} {
	    set v [set $vn$allow0]
	    set v [string_quote $v [string length $allow0]]
	    set line $lhs$v$rhs
	}
	regsub -all {\$\{\@\@\@\}} $line @@@ line
    }
    puts $out $line
    set line1 0
}

close $in
close $out
file rename -force $filename.new $filename