#!/bin/bash

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

demo=in.demo
punch=tyves.flx

rm -f fromgier.asc facit.asc punch.flx

spmno=0
stakpt=0
staklen=0
stak[0]="nix"
questions[0]=""
qno=0

export questions stak stakpt

tailpid=0
gierpid=0
punchpid=0

lande[1]="Afghanistan "
lande[2]="Albanien "
lande[3]="Algerie "
lande[4]="Andorra "
lande[5]="Argentina "
lande[6]="Australien"
lande[7]="Belgien "
lande[8]="Bhutan "
lande[9]="Bolivia "
lande[10]="Brasilien "
lande[11]="Bulgarien "
lande[12]="Burma "
lande[13]="Cambodge "
lande[14]="Cameroun "
lande[15]="Canada "
lande[16]="Centralafrikanske Føderation "
lande[17]="Centralafrikanske Republik "
lande[18]="Ceylon "
lande[19]="Chile "
lande[20]="Colombia "
lande[21]="Congo "
lande[22]="Costa Rica "
lande[23]="Cuba "
lande[24]="Danmark "
lande[25]="Ecuador "
lande[26]="Eire "
lande[27]="Elfenbenskysten "
lande[28]="England "
lande[29]="Etiopien "
lande[30]="Filippinerne "
lande[31]="Finland "
lande[32]="Frankrig "
lande[33]="Gabon "
lande[34]="Ghana "
lande[35]="Grækenland "
lande[36]="Guinea "
lande[37]="Guatemala "
lande[38]="Haiti "
lande[39]="Holland "
lande[40]="Honduras "
lande[41]="India "
lande[42]="Iran(Persien) "
lande[43]="Iraq "
lande[44]="Island "
lande[45]="Israel "
lande[46]="Italien "
lande[47]="Japan "
lande[48]="Jordan "
lande[49]="Jugoslavien "
lande[50]="Kina "
lande[51]="Kuwait "
lande[52]="Kypern "
lande[53]="Laos "
lande[54]="Libanon "
lande[55]="Liberia "
lande[56]="Libia "
lande[57]="Lichtenstein "
lande[58]="Luxemburg "
lande[59]="Madagascar "
lande[60]="Malaya "
lande[61]="Mali "
lande[62]="Marokko "
lande[63]="Mauretanien "
lande[64]="Mexico "
lande[65]="Monaco "
lande[66]="Mongoliet "
lande[67]="Nepal "
lande[68]="New Zealand "
lande[69]="Nicaragua "
lande[70]="Niger "
lande[71]="Nigeria "
lande[72]="Nord Korea "
lande[73]="Nord Vietnam "
lande[74]="Norge "
lande[75]="Oman "
lande[76]="Pakistan/Bangla Desh"
lande[77]="Panama "
lande[78]="Paraguay "
lande[79]="Peru "
lande[80]="Polen "
lande[81]="Portugal "
lande[82]="Rep.Congo "
lande[83]="Rep.Dominicana "
lande[84]="Rep.Volta "
lande[85]="Rumænien "
lande[86]="San Marino "
lande[87]="San Salvador "
lande[88]="Saudi Arabien "
lande[89]="Schweiz "
lande[90]="Senegal "
lande[91]="Sierre Leone "
lande[92]="Singapore "
lande[93]="Somali "
lande[94]="Spanien "
lande[95]="Sudan "
lande[96]="Sverige "
lande[97]="Sydafrikanske Union "
lande[98]="Syd Korea "
lande[99]="Syd Vietnam "
lande[100]="Syrien "
lande[101]="Taiwan(Formosa) "
lande[102]="Tchad "
lande[103]="Thailand "
lande[104]="Tibet "
lande[105]="Tjekkoslovakiet "
lande[106]="Tunis "
lande[107]="Tyrkiet "
lande[108]="Ungarn "
lande[109]="Uruguay "
lande[110]="USA "
lande[111]="USSR "
lande[112]="Vatikanet "
lande[113]="Venezuela "
lande[114]="Vest Tyskland "
lande[115]="Yemen "
lande[116]="Ægypten "
lande[117]="Østrig "
lande[118]="Øst Tyskland "
lande[119]="Indonesien "

for((l=1; l<=119; l++))
do
  landeflag[$l]=0
done

checkslut ()
{
  svar="$1"
  for((l=1;l<=119;l++))
  do
    svar2="Er det ${lande[$l]}"
    if [[ "$svar" == "$svar2" ]]
    then
      return $l
    fi
  done
  return 0
}

checkaandsvag ()
{
  svar="$1"
  hit=0
  if [[ "$svar" == "Er  nationalsporten vandpolo." ]]; then
    hit=1
  elif [[ "$svar" == "Er møntfoden gysser." ]]; then
    hit=1
  elif [[ "$svar" == "Er landets ideal tøffelhelten." ]]; then
    hit=1
  elif [[ "$svar" == "Er nationaldragten mamelukker og træsko." ]]; then
    hit=1
  elif [[ "$svar" == "Løber Gudenåen igennem." ]]; then
    hit=1
  elif [[ "$svar" == "Løber Gudenaaen igennem." ]]; then
    hit=1
  elif [[ "$svar" == "Er vest den vej -----> " ]]; then
    hit=1
  elif [[ "$svar" == "Er det her en kone koster 7 spyd, 3 lerkrukker og 12 grise." ]]; then
    hit=1
  elif [[ "$svar" == "Findes der makaronimarker her." ]]; then
    hit=1
  elif [[ "$svar" == "Har De parkeret Deres vogn korrekt." ]]; then
    hit=1
  elif [[ "$svar" == "Er hovednæringsmidlet tyggegummi." ]]; then
    hit=1
  elif [[ "$svar" == "Har De nogensinde været der." ]]; then
    hit=1
  elif [[ "$svar" == "sp|&n<1>q:i-+789 - Undskyld skrev jeg forkert.
                                              _G_I_E_R." ]]; then
    hit=1
  elif [[ "$svar" == "Kendes landet på sine store dværge." ]]; then
    hit=1
  elif [[ "$svar" == "Kendes landet paa sine store dværge." ]]; then
    hit=1
  elif [[ "$svar" == "Lever der tamme moskusdrager." ]]; then
    hit=1
  elif [[ "$svar" == "Har dronning Margrethe været dronning for dette land." ]]; then
    hit=1
  elif [[ "$svar" == "Findes der i landets flag en blå struds." ]]; then
    hit=1
  elif [[ "$svar" == "Findes der i landets flag en blaa struds." ]]; then
    hit=1
  elif [[ "$svar" == "Er det tømmermændenes hjemland." ]]; then
    hit=1
  elif [[ "$svar" == "Tror befolkningen på onde ånder." ]]; then
    hit=1
  elif [[ "$svar" == "Tror befolkningen paa onde aander." ]]; then
    hit=1
  elif [[ "$svar" == "sta- sta- stammer be- be- befolkningen." ]]; then
    hit=1
  elif [[ "$svar" == "Elsker befolkningen Sauerkraut." ]]; then
    hit=1
  elif [[ "$svar" == "Lever indbyggerne i snehytter." ]]; then
    hit=1
  fi
  echo aandsvag: $hit >&2
  return $hit 
}

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

dopunch()
{
  uc=0
  linebuffer=""
  while true
  do
    read -N1 -r -d '' -t 0.1 ch
    ok=$?
    if [ $ok -gt 128 ]
    then
      while [ "${linebuffer:0:1}" == " " -o "${linebuffer:0:1}" == "
" ]
      do
	linebuffer="${linebuffer:1}"
      done
      q="$linebuffer"
      linebuffer=""
      echo timeout "$q"
      questions[$qno]="$q"
      qno=$((qno+1))
      checkaandsvag "$q"
      if [[ $? -ne 0 ]]
      then
	answers[qno-1]="ja"
	echo send ja to GIER
	./maketext.sh ja >>$demo
	/bin/echo -n "ja" >>fromgier.asc
	echo "WAITINPUT" >>$demo
        continue
      fi
      if [ "${q:0:8}" == "Det var " -o "${q:0:9}" == "Desværre " ]
      then
	stakpt=0
	echo staklen: $staklen ${!stak[@]} ${stak[@]}
	while [[ $staklen -gt 0 ]]
	do
	  echo sidste: $((staklen-1)) ${stak[staklen-1]}
	  if [ "${stak[staklen-1]}" == "ja" ]
	  then
	    stak[staklen-1]="nej"
	    echo sæt $((staklen-1)) til nej
	    break
	  else
	    staklen=$((staklen-1))
	    echo pop, ny staklen: $staklen
	  fi
	done
	echo staklen: $staklen
	if [[ $staklen -eq 0 ]]
	then
	  echo slut
	  echo send nej to GIER
	  answers[qno-1]="nej"
	  ./maketext.sh nej >>$demo
	  /bin/echo -n "nej" >>fromgier.asc
	  echo "WAITINPUT" >>$demo
	else
	  echo prøv igen
	  echo send ja to GIER
	  answers[qno-1]="ja"
	  ./maketext.sh ja >>$demo
	  /bin/echo -n "ja" >>fromgier.asc
	  echo "WAITINPUT" >>$demo
	fi
	if [ "${q:0:8}" == "Det var " ]
	then
	  if [ ${landeflag[svarland]} -eq 0 ]
	  then
	    echo "--------------------------------" >>facit.asc
	    echo "Land: ${lande[svarland]}" >>facit.asc
	    echo " " >>facit.asc
	    for((l=0;l<qno;l++))
	    do
	      echo "${questions[l]}${answers[$l]}" >>facit.asc
	    done
	    landeflag[$svarland]=1
	  fi

	  nlande=0
	  for((l=1;l<=119;l++))
	  do
	    nlande=$((nlande+landeflag[l]))
	  done
	  echo nlande: $nlande
	fi
	if [[ $staklen -eq 0 ]]
	then
	  echo slut
	  sleep 1
	  for((l=1;l<=119;l++))
	  do
	    if [ ${landeflag[l]} -eq 0 ]
	    then
	      echo ${lande[l]} mangler
	      echo ${lande[l]} mangler >>facit.asc
	    fi
	  done
	  echo done
	  echo "FINISHPUNCH" >>$demo
	  echo "QUIT" >>$demo
	  cleanup
	  exit 0
	fi
	qno=0
	continue
      fi
      spmno=$((spmno+1))
      checkslut "$q"
      svarland=$?
      if [[ $svarland -ne 0 ]]
      then
	echo spmno: $spmno
	if [[ $spmno -eq 1 ]]
	then
	  echo send nej to GIER
	  answers[qno-1]="nej"
	  ./maketext.sh nej >>$demo
	  /bin/echo -n "nej" >>fromgier.asc
	  echo "WAITINPUT" >>$demo
	  continue
	fi
      fi
      stakpt=$((stakpt+1))
      if [[ $stakpt -gt $staklen ]]
      then
	stak[$staklen]="ja"
	staklen=$((staklen+1))
	answers[qno-1]="ja"
	./maketext.sh ja >>$demo
	/bin/echo -n "ja" >>fromgier.asc
	echo "WAITINPUT" >>$demo
      else
	svar=${stak[stakpt-1]}
	answers[qno-1]="$svar"
	./maketext.sh $svar >>$demo
	/bin/echo -n "$svar" >>fromgier.asc
	echo "WAITINPUT" >>$demo
      fi
    fi
    /bin/echo -n "$ch" >>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="
"
	;;
      *)
	echo unknown character
      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="
"
	;;
      *)
	echo unknown character
      esac
    fi
#   echo got $ch $c "$asc"
    if [[ "$asc" == "
" ]]
    then
      echo >>fromgier.asc
    else
      /bin/echo -n "$asc" >>fromgier.asc
    fi
    linebuffer="$linebuffer$asc"
#   echo linebuffer: $linebuffer
    if [ "${linebuffer:(-5):5}" == "KLAR." ]
    then
      spmno=0
      linebuffer=""
      lastq=0
      echo set lastq: $lastq
      echo send ja to GIER på KLAR
      ./maketext.sh ja >>$demo
      /bin/echo -n "ja" >>fromgier.asc
      echo "WAITINPUT" >>$demo
    fi
  done
}

rm -rf $demo tyves.flx

cp configs/ht.gier default.gier
echo "Select3	00000010" >>default.gier
echo "Select2	00000000" >>default.gier
echo "kb2_visible	00000000" >>default.gier

trap "cleanup" INT

mkfifo in.demo
mkfifo in2.demo
mkfifo tyves.flx

dopunch <tyves.flx &
punchpid=$!

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

echo "LOADPUNCH $punch" >>$demo
./maketext.sh "run,tyves<" >>$demo
echo "WAITINPUT" >>$demo
wait $gierpid

