#!/usr/bin/tclsh set el_filt {<([a-zA-Z0-9]+)>([^<]+)</([a-zA-Z0-9]+)>} proc save_comp {} { global outf elem if {$elem(element) == 0} { ;# 'Discrete' if {$elem(iscap) == 0} { ;# Inductance puts $outf " <element>0</element>" puts $outf " <val2>$elem(val)</val2>" } else { ;# Capacitor puts $outf " <element>1</element>" puts $outf " <val1>$elem(val)</val1>" } } else { puts $outf " <element>[expr $elem(element)+3]</element>" puts $outf " <val1>$elem(val)</val1>" } puts $outf " <connection>[expr $elem(connection) % 256]</connection>" foreach typ {useloss z0 vf loss1 mhz1 loss2 mhz2} { puts $outf " <$typ>$elem($typ)</$typ>" } } if {$argc != 2} { puts "Converts old (0.8.x) circuit files into the new (0.9.x) format." puts "Usage:" puts " conv0809 oldfile newfile" puts "" exit } set infn [lindex $argv 0] set outfn [lindex $argv 1] set inf [open $infn r] set outf [open $outfn w] set mode COPY while {![eof $inf]} { set line [gets $inf] switch $mode { COPY { puts $outf $line if {[regexp "<element>" $line]} { set mode ELEM } } ELEM { if {[regexp $el_filt $line dummy entry val exit]} { if {$entry == $exit} { set elem($entry) $val } } else { if {[regexp "</element>" $line]} { save_comp puts $outf $line set mode COPY } } } } } close $inf close $outf