#!/bin/bash
#set -x

clock=455000

testit ()
{
  local n=$1
  local tape=/tmp/big.asc
  local demo=findbig.demo
  echo "algol,_i<" >$tape
  echo "n: $n" >>$tape
  echo "_b_e_g_i_n" >>$tape
  echo "_i_n_t_e_g_e_r i;" >>$tape
  echo -n "i:=" >>$tape
  for((i=1; i<=n; i++))
  do
    if [ $i -eq 1 ]
    then
      echo -n "1" >>$tape
    else
      echo -n "+$i" >>$tape
    fi
  done
  echo ";" >>$tape
  echo "writecr;" >>$tape
  echo "writeinteger(|<p|>,i)" >>$tape
  echo "_e_n_d;" >>$tape
  echo "t<" >>$tape
  echo "LOADPUNCH /tmp/bigout.flx" >$demo
  echo "text $config" >>$demo
  echo "LOADREADER $tape" >>$demo
  echo "WAITINPUT" >>$demo
#   r
  echo "TYPE 41" >>$demo
  echo "WAITINPUT" >>$demo
#   <
  echo "TYPE 17" >>$demo
  echo "WAITINPUT" >>$demo
  echo "FINISHPUNCH" >>$demo
  echo "QUIT" >>$demo
  ../GIER $demo
  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 drum180bufga4 drum180nobufga4 drum1bufga4 drum1nobufga4 drum3bufcarrga4 drum3bufdiskga4 drum3bufga4 drum3buftapega4 drum3nobufga4
do
  echo config: $config `date`
  lo=100
  hi=100000
  lastok=0
  declare -A failpass
  while [ $(expr $hi - $lo) -ne 1 ]
  do
    mid=$(expr $lo + '(' $hi - $lo ')' / 2)
    echo $lo $mid $hi
    cp $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
    testit $mid
    flx2a </tmp/bigout.flx
    if [ $result -eq 0 ]
    then
      echo $mid ok
      lastok=$mid
      lo=$mid
    else
      echo $mid bad
      hi=$mid
      lastpass=0
      flx2a </tmp/bigout.flx >/tmp/bigout.asc
      while read l
      do
	c1=${l:0:1}
	c2=${l:1:1}
	if [ "$c2" == "." ]
	then
	  lastpass=$c1
	fi
      done </tmp/bigout.asc
      echo lastpass: $lastpass
      failpass[$mid]=$lastpass
    fi
  done
  outfile=$config'_'$lastok
  if [ $lastok -gt 0 ]
  then
    cp $config.gier default.gier
#   select(16) goes to punch, too:
    echo "Select3	00000030" >>default.gier
#                       00000800 execute
#                       00000400 buffer
#                       00000100 drum
    echo "debug	00000500" >>default.gier
    echo "kb1_visible	00000000" >>default.gier
    echo "kb2_visible	00000000" >>default.gier
    testit $lastok
    mv gier.debug $outfile.debug
    start=`grep -E '^[LS]K' $outfile.debug | awk '{printf "%.8f\n", $4/'$clock';}' | sort -n | head -1`
    finish=`grep -E '^[LS]K' $outfile.debug | awk '{printf "%.8f\n", $4/'$clock';}' | sort -n | tail -1`
    elapsed=`awk 'BEGIN{printf "%.8f",'$finish'-'$start'}'`
    ../plot.sh $outfile.debug
    rm -f $outfile.debug
    mv plot.pdf $outfile.pdf
  else
    elapsed=0
    rm -f $outfile.pdf
  fi
  echo Result: config: $config elapsed: $elapsed lastok: $lastok lastpass: $lastpass failpass: ${failpass[$((lastok+1))]}
done
