#!/bin/bash

blacklist="R31 R32 D07"

f_new="v1.pcb"
f_old="../ppm-1.2/v1.pcb"

n_new=$(wc -l < $f_new)
n_old=$(wc -l < $f_old)

for lnum in $(grep '^Layer' $f_new | sed -e 's@(@ @g' | awk '{print $2}'); do
  ij_new=$(awk -v n=$lnum -f ../../scripts/layer.awk $f_new)
  i_new=$(echo $ij_new | cut -f 1 -d ' ')
  j_new=$(echo $ij_new | cut -f 2 -d ' ')

  ij_old=$(awk -v n=$lnum -f ../../scripts/layer.awk $f_old)
  i_old=$(echo $ij_old | cut -f 1 -d ' ')
  j_old=$(echo $ij_old | cut -f 2 -d ' ')

  if [ "$(expr $j_old \< $i_old)" == "1" ]; then
    continue
  fi

  if [ "$(expr $j_new \< $i_new)" == "1" ]; then
    j_new=$i_new
  fi

  i_new=$(expr $i_new - 1)

  sed -n "1,${i_new}p" $f_new > TMP
  sed -n "${i_old},${j_old}p" $f_old >> TMP
  sed -n "${j_new},${n_new}p" $f_new >> TMP
  mv TMP $f_new

  n_new=$(wc -l < $f_new)
done

i_new=$(grep -n ^Element $f_new | head -n 1 | cut -f 1 -d :)
i_new=$(expr $i_new - 1)
j_new=$(expr $i_new + 1)

sed -n "1,${i_new}p" $f_new > TMP
echo >> TMP
grep ^Via $f_old >> TMP
echo >> TMP
sed -n "${j_new},${n_new}p" $f_new >> TMP
mv TMP $f_new

n_new=$(wc -l < $f_new)

for el in $(awk '/^Element/{print$3}' $f_new | sed -e 's@"@@g' | sort); do
  if [ ! "$(echo ${blacklist} | grep ${el})" == "" ]; then
    continue
  fi
  n1_new=$(awk "/^Element/&&\$3==\"\\\"${el}\\\"\"{print NR}" $f_new)
  n1_old=$(awk "/^Element/&&\$3==\"\\\"${el}\\\"\"{print NR}" $f_old)
  for n in $(seq $n1_new $n_new); do
    if [ "$(awk -v l=$n 'NR==l&&$0=="\t)"{print "1"}' $f_new)" == "1" ]; then
      n2_new=$n
      break
    fi
  done
  for n in $(seq $n1_old $n_old); do
    if [ "$(awk -v l=$n 'NR==l&&$0=="\t)"{print "1"}' $f_old)" == "1" ]; then
      n2_old=$n
      break
    fi
  done
  if [ ! "${n1_new}" == "" -a ! "${n2_new}" == "" \
    -a ! "${n1_old}" == "" -a ! "${n2_old}" == "" ]; then
    d_new=$(echo "${n2_new}-${n1_new}+1" | bc -l)
    d_old=$(echo "${n2_old}-${n1_old}+1" | bc -l)
    if [ "${d_new}" == "${d_old}" ]; then
      sed -n "1,$(expr ${n1_new} - 1)p" $f_new > TMP
      sed -n "${n1_old},${n2_old}p" $f_old >> TMP
      sed -n "$(expr ${n2_new} + 1),${n_new}p" $f_new >> TMP
      mv TMP $f_new
    fi
  fi
done

