#!/bin/bash

# stdbuf -o0 -e0 ./damspil.sh >damspil.out 2>&1

killall Xvfb

Xvfb :3 >/dev/null 2>&1 &
xpid=$!
export DISPLAY=:3

hvidlevel=2
sortlevel=2
rm -f hvidpunch_*.pdf

#RND=$((RANDOM+1))
for((RND=1;RND<=1000;RND++))
do
if [ -f hvidpunch_${RND}.pdf ]
then
echo ${RND} findes allerede
else
killall tee
killall GIER

echo RND: $RND
DAMSPIL=/tmp/damspil$$.asc
RND1=$((RND+1))
sed "s/10000002/$RND1/g" <../tapes/mk/damspil.asc >$DAMSPIL

rm -f buffer.log fromgier.asc hvidfromgier.asc sortfromgier.asc hvid2.demo hvid.demo hvid.demo.tee hvid.flx hvid.GIER.out punch.flx sort2.demo sort.demo sort.demo.tee sort.flx sort.GIER.out sortpunch.flx hvidpunch.flx


cleanup ()
{
  echo cleanup called
  killall tee
  killall GIER
  killall Xvfb
  exit 0
}

dogier()
{
  local color=$1
  local anticolor
  if [ "$color" == "hvid" ]
  then
    anticolor=sort
  else
    anticolor=hvid
  fi
  local demo=${anticolor}.demo
  local demo=${color}.demo
  local demo2=${color}2.demo
  local punch=${color}.flx
  tail -1f $demo | tee ${demo}.tee >$demo2 &
  local tailpid=$!
  ../GIER $demo2 >${color}.GIER.out 2>&1 &
  local gierpid=$!
# sleep 1
  local cnt
  for((cnt=1;;cnt++))
  do
#   echo cnt: $cnt
    echo "SLEEP 0" >>$demo
    if [ -f ${demo}.tee ]
    then
      fgrep -q SLEEP ${demo}.tee
      local st=$?
      if [ $st -eq 0 ]
      then
	break
      fi
    fi
  done
  echo "LOADCONFIG ../configs/damspil.gier" >>$demo
  echo "LOADREADER $DAMSPIL" >>$demo
  echo "SELECT 1 0" >>$demo
# echo "SELECT 3 48" >>$demo
  echo "SELECT 2 0" >>$demo
  echo "SELECT 3 16" >>$demo
  echo "HIDE KB1" >>$demo
  echo "HIDE KB2" >>$demo
  echo "HIDE MAGTAPE" >>$demo
  echo "LOADPUNCH $punch" >>$demo
  ../maketext.sh "r<" >>$demo
  echo "WAITINPUT" >>$demo
  echo "PRESS SETKB" >>$demo
  echo "PRESS CLEARKB" >>$demo
  ../maketext.sh "run<" >>$demo
  echo "WAITINPUT" >>$demo
  if [ "$color" == "hvid" ]
  then
    echo "TYPE 56" >>$demo
  else
    echo "TYPE 18" >>$demo
  fi
  echo "WAITINPUT" >>$demo
  local tmp=${color}level
  ../maketext.sh "${!tmp}," >>$demo
  echo "WAITINPUT" >>$demo
  wait $gierpid
}

dopunch()
{
  local color=$1
  local anticolor
  if [ "$color" == "hvid" ]
  then
    anticolor=sort
  else
    anticolor=hvid
  fi
  local demo=${anticolor}.demo
  local migdemo=${color}.demo
  local punch=${color}.flx
  local fromgier=${color}fromgier.asc
  local antifromgier=${anticolor}fromgier.asc
  local uc=0
  local linebuffer=""
  local ch
  local ch2
  local c
  local asc
  while true
  do
    read -N1 -r -d '' -t 0.02 ch2
    local ok=$?
    if [ $ok -gt 128 ]
    then
      local savebuffer="$linebuffer"
      while [ "${linebuffer:0:1}" == " " -o "${linebuffer:0:1}" == "
" ]
      do
	linebuffer="${linebuffer:1}"
      done
      local q="$linebuffer"
#     echo timeout ${#savebuffer} ${#linebuffer}
      linebuffer=""
    else
      chlen=${#ch2}
#     echo chlen: $chlen
      for((chpnt=0;chpnt<chlen;chpnt++))
      do
	ch="${ch2:chpnt:1}"
	/bin/echo -n "$ch" >>${color}punch.flx
	printf -v c "%d" "'$ch"
	c=$(((c&0xe0)>>1 | (c&0x0f)))
	if [ $uc -eq 0 ]
	then
	  case $c in
	  0)
	    asc=" "
	    ;;
	  1)
	    asc="1"
	    ;;
	  2)
	    asc="2"
	    ;;
	  3)
	    asc="3"
	    ;;
	  4)
	    asc="4"
	    ;;
	  5)
	    asc="5"
	    ;;
	  6)
	    asc="6"
	    ;;
	  7)
	    asc="7"
	    ;;
	  8)
	    asc="8"
	    ;;
	  9)
	    asc="9"
	    ;;
	  10)
	    asc=""
	    ;;
	  11)
	    asc=""
	    ;;
	  12)
	    asc=""
	    ;;
	  13)
	    asc="å"
	    ;;
	  14)
	    asc="_"
	    ;;
	  15)
	    asc=""
	    ;;
	  16)
	    asc="0"
	    ;;
	  17)
	    asc="<"
	    ;;
	  18)
	    asc="s"
	    ;;
	  19)
	    asc="t"
	    ;;
	  20)
	    asc="u"
	    ;;
	  21)
	    asc="v"
	    ;;
	  22)
	    asc="w"
	    ;;
	  23)
	    asc="x"
	    ;;
	  24)
	    asc="y"
	    ;;
	  25)
	    asc="z"
	    ;;
	  26)
	    asc=""
	    ;;
	  27)
	    asc=","
	    ;;
	  28)
	    asc=""
	    ;;
	  29)
	    asc=""
	    ;;
	  30)
	    asc="	"
	    ;;
	  31)
	    asc=""
	    ;;
	  32)
	    asc="-"
	    ;;
	  33)
	    asc="j"
	    ;;
	  34)
	    asc="k"
	    ;;
	  35)
	    asc="l"
	    ;;
	  36)
	    asc="m"
	    ;;
	  37)
	    asc="n"
	    ;;
	  38)
	    asc="o"
	    ;;
	  39)
	    asc="p"
	    ;;
	  40)
	    asc="q"
	    ;;
	  41)
	    asc="r"
	    ;;
	  42)
	    asc=""
	    ;;
	  43)
	    asc="ø"
	    ;;
	  44)
	    asc=""
	    ;;
	  45)
	    asc=""
	    ;;
	  46)
	    asc=""
	    ;;
	  47)
	    asc=""
	    ;;
	  48)
	    asc="æ"
	    ;;
	  49)
	    asc="a"
	    ;;
	  50)
	    asc="b"
	    ;;
	  51)
	    asc="c"
	    ;;
	  52)
	    asc="d"
	    ;;
	  53)
	    asc="e"
	    ;;
	  54)
	    asc="f"
	    ;;
	  55)
	    asc="g"
	    ;;
	  56)
	    asc="h"
	    ;;
	  57)
	    asc="i"
	    ;;
	  58)
	    asc=""
	    uc=0
	    ;;
	  59)
	    asc="."
	    ;;
	  60)
	    asc=""
	    uc=1
	    ;;
	  61)
	    asc=""
	    ;;
	  62)
	    asc=""
	    ;;
	  63)
	    asc=""
	    ;;
	  64)
	    asc="
    "
	    ;;
	  72)
	    asc=""
	    ;;
	  *)
	    echo unknown character $c
	  esac
	else
	  case $c in
	  0)
	    asc=" "
	    ;;
	  1)
	    asc="£"
	    ;;
	  2)
	    asc="*"
	    ;;
	  3)
	    asc="/"
	    ;;
	  4)
	    asc="="
	    ;;
	  5)
	    asc=";"
	    ;;
	  6)
	    asc="["
	    ;;
	  7)
	    asc="]"
	    ;;
	  8)
	    asc="("
	    ;;
	  9)
	    asc=")"
	    ;;
	  10)
	    asc=""
	    ;;
	  11)
	    asc=""
	    ;;
	  12)
	    asc=""
	    ;;
	  13)
	    asc="Å"
	    ;;
	  14)
	    asc="|"
	    ;;
	  15)
	    asc=""
	    ;;
	  16)
	    asc="&"
	    echo kilroy
	    ;;
	  17)
	    asc=">"
	    ;;
	  18)
	    asc="S"
	    ;;
	  19)
	    asc="T"
	    ;;
	  20)
	    asc="U"
	    ;;
	  21)
	    asc="V"
	    ;;
	  22)
	    asc="W"
	    ;;
	  23)
	    asc="X"
	    ;;
	  24)
	    asc="Y"
	    ;;
	  25)
	    asc="Z"
	    ;;
	  26)
	    asc=""
	    ;;
	  27)
	    asc="'"
	    ;;
	  28)
	    asc=""
	    ;;
	  29)
	    asc=""
	    ;;
	  30)
	    asc="	"
	    ;;
	  31)
	    asc=""
	    ;;
	  32)
	    asc="+"
	    ;;
	  33)
	    asc="J"
	    ;;
	  34)
	    asc="K"
	    ;;
	  35)
	    asc="L"
	    ;;
	  36)
	    asc="M"
	    ;;
	  37)
	    asc="N"
	    ;;
	  38)
	    asc="O"
	    ;;
	  39)
	    asc="P"
	    ;;
	  40)
	    asc="Q"
	    ;;
	  41)
	    asc="R"
	    ;;
	  42)
	    asc=""
	    ;;
	  43)
	    asc="Ø"
	    ;;
	  44)
	    asc=""
	    ;;
	  45)
	    asc=""
	    ;;
	  46)
	    asc=""
	    ;;
	  47)
	    asc=""
	    ;;
	  48)
	    asc="Æ"
	    ;;
	  49)
	    asc="A"
	    ;;
	  50)
	    asc="B"
	    ;;
	  51)
	    asc="C"
	    ;;
	  52)
	    asc="D"
	    ;;
	  53)
	    asc="E"
	    ;;
	  54)
	    asc="F"
	    ;;
	  55)
	    asc="G"
	    ;;
	  56)
	    asc="H"
	    ;;
	  57)
	    asc="I"
	    ;;
	  58)
	    asc=""
	    uc=0
	    ;;
	  59)
	    asc=":"
	    ;;
	  60)
	    asc=""
	    uc=1
	    ;;
	  61)
	    asc=""
	    ;;
	  62)
	    asc=""
	    ;;
	  63)
	    asc=""
	    ;;
	  64)
	    asc="
    "
	    ;;
	  72)
	    asc=""
	    ;;
	  *)
	    echo unknown character
	  esac
	fi
#   echo got $ch $c "$asc"
	if [[ "$asc" == "
    " ]]
	then
	  echo >>$fromgier
	else
	  /bin/echo -n "$asc" >>$fromgier
	fi
#   a1,b2,c3<
#   987654321
	linebuffer="$linebuffer$asc"
#   echo linebuffer: $linebuffer
	if [ "${linebuffer:(-4)}" == "igen" ]
	then
	  echo "WAITINPUT" >>$migdemo
	  ../maketext.sh "n" >>$migdemo
	  echo "WAITINPUT" >>$migdemo
	  echo "QUIT" >>$migdemo
	  echo $color return
	  return
	fi
	if [ "${linebuffer:(-1):1}" == "<" ]
	then
	  if [ "${linebuffer:(-4):1}" == "," ]
	  then
	    local i
	    for((i=7;;i+=3))
	    do
	      if [ "${linebuffer:(-$i):1}" == " " ]
	      then
		i=$((i-1))
		local got="${linebuffer:(-$i)}"
		echo $color $got
		../maketext.sh "${got}" >>$demo
		/bin/echo -n "$got" >>$antifromgier
		echo "WAITINPUT" >>$demo
		linebuffer=""
		break
	      fi
	    done
	  fi
	fi
      done
    fi
  done
}

trap "cleanup" INT

mkfifo sort.demo
mkfifo hvid.demo
mkfifo sort2.demo
mkfifo hvid2.demo
mkfifo sort.flx
mkfifo hvid.flx

dopunch sort <sort.flx &
sortpunchpid=$!

dopunch hvid <hvid.flx &
hvidpunchpid=$!

dogier hvid &
hvidpid=$!

dogier sort &
sortpid=$!
echo wait called $sortpid $hvidpid
jobs
wait -n $sortpid $hvidpid
echo wait done
jobs
kill $sortpunchpid
kill $hvidpunchpid
kill $sortpid
kill $hvidpid
killall GIER
#ps -ef|fgrep mk|fgrep -v snap

#flx2ps >hvidpunch.ps <hvidpunch.flx
#flx2ps >sortpunch.ps <sortpunch.flx
#ps2pdf hvidpunch.ps hvidpunch_${RND}.pdf
#ps2pdf sortpunch.ps sortpunch_${RND}.pdf
mv hvidpunch.flx hvidpunch_${RND}.flx
mv sortpunch.flx sortpunch_${RND}.flx
#flx2a <hvidpunch_${RND}.flx | sed 's/#029//g' | sed 's/#062//g' >hvidpunch_${RND}.asc
#flx2a <sortpunch_${RND}.flx | sed 's/#029//g' | sed 's/#062//g' >sortpunch_${RND}.asc

fi
done
