xschem/src/reduce_even_odd_array_label...

115 lines
1.9 KiB
Awk
Raw Normal View History

2020-08-08 15:47:34 +02:00
#!/usr/bin/awk -f
# in .sch and/or .sym XSCHEM files
# reduce labels of type AA[7],AA[5],AA[3],AA[1] to AA[7:1:2]
# usage: reduce_even_odd_array_labels.awk *.sym *.sch
# stefan, 20161226
FNR == 1 {
if (_filename_ != "")
endfile(_filename_)
_filename_ = FILENAME
#print "processing: " FILENAME >"/dev/stderr"
beginfile(FILENAME)
}
END { endfile(_filename_) }
###### begin user code ########################
# C {devices/iopin} 270 60 0 0 {name=p311557 lab=AABLEQBL[30],AABLEQBL[28
/^C .devices.*pin\}/{
l=$0
sub(/^.*lab=/,"", l)
sub(/\} *$/,"", l)
translate()
if(evenbus) {
found=1
sub(/lab=.*/,"", $0)
$0 = $0 " lab=" newlab "} "
}
}
# T {nDisturbL[31],nDisturbL[29],nDi..... } 125 1686 0 1 0.2 0.2 {}
2020-08-08 15:47:34 +02:00
# B 5 147.5 -1672.5 152.5 -1667.5 {name=ARBLEQALF[30],ARBLEQALF[28],...,ARBLEQALF[0] dir=inout }
/^T \{/{
l=$2
sub(/\{/,"", l)
sub(/\}$/,"", l)
translate()
if(evenbus) {
found=1
$2="{" newlab "}"
$0=$0
}
}
/^B /{
l=$7
sub(/\{name=/,"", l)
translate()
if(evenbus) {
found=1
$7="{name=" newlab
$0=$0
}
}
function translate()
{
evenbus=0
nn = split(l,ll,",")
if(nn>1) {
evenbus=1
for(ii=1;ii<=nn;ii++) {
basename=ll[ii]
sub(/\[.*/,"",basename)
if(ii==1) {
first_basename = basename
}
idx = ll[ii]
sub(/.*\[/,"",idx)
sub(/\]/,"",idx)
idx+=0
2020-08-08 15:47:34 +02:00
if(ii>1 && ( (idx+2!=previdx) || (basename !=first_basename) ) ) {
evenbus=0
break
}
previdx = idx+0
}
if(evenbus) {
idxlow = idx
idxhi=idxlow+2*(nn-1)
newlab = basename "[" idxhi ":" idxlow ":" 2 "]"
}
}
}
###### end user code ########################
{
__a[__lines++] = $0
2020-08-08 15:47:34 +02:00
}
function beginfile(f)
{
__lines=0
found=0
}
function endfile(f, i)
{
if(found) {
print "patching: " f >"/dev/stderr"
for(i=0;i<__lines;i++)
{
print __a[i] > f
}
close(f)
}
}
2020-08-08 15:47:34 +02:00