#!/bin/bash
#set -x

tailpid=0
gierpid=0

cleanup ()
{
  echo cleanup called
  rm -f /tmp/passes.flx
  if [ $tailpid -ne 0 ]
  then
    echo kill tail
    kill $tailpid
    tailpid=0
  fi
  if [ $gierpid -ne 0 ]
  then
    echo kill gier
    kill $gierpid
    gierpid=0
  fi
  rm in.demo in2.demo
  exit 0
}

trap "cleanup" INT

mkfifo in.demo
mkfifo in2.demo
tail -1f in.demo | tee in.demo.tee >in2.demo &
tailpid=$!
../GIER in2.demo > GIER.out 2>&1 &
gierpid=$!
demo=in.demo

testit ()
{
  local tape=/tmp/big.asc
  echo "check,_aga4<" >$tape
# echo "algol<" >>$tape
# echo "_b_e_g_i_n" >>$tape
# echo "writecr;" >>$tape
# echo "writetext(|<<OK|>)" >>$tape
# echo "_e_n_d;" >>$tape
  echo "t<" >>$tape
  rm -f /tmp/bigout.flx
  echo "LOADPUNCH /tmp/bigout.flx" >>$demo
  echo "LOADREADER $tape" >>$demo
  echo "WAITINPUT" >>$demo
#   r
  echo "TYPE 41" >>$demo
  echo "WAITINPUT" >>$demo
#   <
  echo "TYPE 17" >>$demo
  echo "WAITINPUT" >>$demo
  echo "TYPE 13" >>$demo
  echo "WAITINPUT" >>$demo
  while :
  do
    if [ -f /tmp/bigout.flx ]
    then
      echo punch file available
      break
    else
      echo wait for punch file
      sleep 1
    fi
  done
  while :
  do
    flx2a </tmp/bigout.flx|grep -E -q 'annul|undef'
    result=$?
    if [ $result -eq 0 ]
    then
      break
    fi
    usleep 100000
  done
  echo "FINISHPUNCH" >>$demo
  flx2a </tmp/bigout.flx|fgrep -q undef
  badga4=$?
  flx2a </tmp/bigout.flx|fgrep -q ok
  result=$?
}

#for config in help3demo big1 buffertape disc1 drumtjek drumtjekga4
#for config in drum3bufga4 drum3nobufga4 aarhus drum1bufcarr
#for config in big3 aarhus2
#for config in help3demo big1 buffertape disc1 drumtjek drumtjekga4 drum3bufga4 drum3nobufga4 aarhus drum1bufcarr aarhus2
#for config in big6
#for config in disc2 disc6 drum1bufcarr drum1ga3 drum1ga4 drum1 drum1nobuf drum3bufga4 drum3bufga4turbo drum3buf drum3ga3 drum3ga4 drum3 drum3nobufga4 drum3nobufga4turbo drum3nobuf drumtjekga4 drumtjek help3demo
#for config in drumtjek
#for config in aarhus1 aarhus2 aarhus big1 big2 big3 big4ga4 big4 big5ga4 big5 big6ga4 big6 bufferdisk buffertape2 buffertape buffertapesamba buffertapew disc1ga4 disc1 disc2 disc6 drum1bufcarr drum1ga3 drum1ga4 drum1 drum1nobuf drum3bufga4 drum3bufga4turbo drum3buf drum3ga3 drum3ga4 drum3 drum3nobufga4 drum3nobufga4turbo drum3nobuf drumtjekga4 drumtjek help3demo
#for config in aarhus
for config in aarhus1 aarhus2 aarhus big1 big2 big3 big4ga4 big4 big5ga4 big5 big6ga4 big6 bufferdisk buffertape2 buffertape buffertapesamba buffertapew disc1ga4 disc1 disc2 disc6 drum1bufcarr drum1ga3 drum1ga4 drum1 drum1nobuf drum3bufga4 drum3bufga4turbo drum3buf drum3ga3 drum3ga4 drum3 drum3nobufga4 drum3nobufga4turbo drum3nobuf drumtjekga4 drumtjek help3demo
do
          echo config: $config
	  cp ../configs/$config.gier default.gier
#         select(16) goes to punch, too:
	  echo "Select3	00000030" >>default.gier
	  echo "kb1_visible	00000000" >>default.gier
	  echo "kb2_visible	00000000" >>default.gier
	  echo "TEXT $config" >>$demo
	  echo "loadconfig default.gier" >>$demo
	  echo "debug D01">>$demo
	  testit
	  echo "debug 0">>$demo
	  flx2a </tmp/bigout.flx
	  mv gier.debug $config.debug
	  if [ $badga4 -eq 0 ]
	  then
	    lastok=0
	    break
	  fi
done

echo quit >>$demo
sleep 1
cleanup

