#!/bin/bash
#set -x

clock=455000

testit ()
{
  local n=$1
  local real=$2
  local tape=/tmp/big.asc
  local demo=findbig.demo
  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
      if [ $real -gt 0 ]
      then
        echo -n "1.0" >>$tape
      else
        echo -n "1" >>$tape
      fi
    else
      if [ $real -gt 1 ]
      then
        echo -n "+$i.0" >>$tape
      else
        echo -n "+$i" >>$tape
      fi
    fi
  done
  echo ";" >>$tape
  echo "skrvvr;" >>$tape
  echo "skrv(|<ddd ddd ddd|>,i)" >>$tape
  echo "_e_n_d;" >>$tape
  echo "LOADPUNCH /tmp/bigout.flx" >$demo
  echo "LOADREADER $tape" >>$demo
  echo "WAITINPUT" >>$demo
# _
  echo "TYPE 14" >>$demo
  echo "WAITINPUT" >>$demo
# h
  echo "TYPE 56" >>$demo
  echo "WAITINPUT" >>$demo
# a
  echo "TYPE 49" >>$demo
  echo "WAITINPUT" >>$demo
# l
  echo "TYPE 35" >>$demo
  echo "WAITINPUT" >>$demo
# g
  echo "TYPE 55" >>$demo
  echo "WAITINPUT" >>$demo
# o
  echo "TYPE 38" >>$demo
  echo "WAITINPUT" >>$demo
# l
  echo "TYPE 35" >>$demo
  echo "WAITINPUT" >>$demo
# CR
  echo "TYPE 64" >>$demo
  echo "WAITINPUT" >>$demo
# _
  echo "TYPE 14" >>$demo
  echo "WAITINPUT" >>$demo
# e
  echo "TYPE 53" >>$demo
  echo "WAITINPUT" >>$demo
# CR
  echo "TYPE 64" >>$demo
  echo "WAITINPUT" >>$demo
# s compiler output on typewriter
  echo "TYPE 18" >>$demo
  echo "WAITINPUT" >>$demo
# i pass information
  echo "TYPE 57" >>$demo
  echo "WAITINPUT" >>$demo
# SPACE go
  echo "TYPE 0" >>$demo
  echo "WAITINPUT" >>$demo
  echo "FINISHPUNCH" >>$demo
  echo "QUIT" >>$demo
  ../GIER $demo
  flx2a </tmp/bigout.flx|grep -q '^klar'
  result=$?
}

for config in hjælpga2
do
  for real in 0 1 2
  do
    echo config: $config $real `date`
    lo=100
    hi=100000
    lastok=0
    while [ $(expr $hi - $lo) -ne 1 ]
    do
      mid=$(expr $lo + '(' $hi - $lo ')' / 2)
      echo $lo $mid $hi
      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
      testit $mid $real
      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
      fi
    done

    outfile=$config$real
    outfile=$outfile'_'$lastok
    if [ $lastok -gt 0 ]
    then
      cp ../configs/$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 $real
      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.com $outfile.debug
      rm -f $outfile.debug
      mv plot.pdf $outfile.pdf
    else
      elapsed=0
      rm -f $outfile.pdf
    fi
    echo Result: real: $real config: $config elapsed: $elapsed lastok: $lastok lastpass: $lastpass
  done
done
