#!/bin/bash

BUFFER=0

# ga4 parameters:
#
#
# e14=90   ; Depending on available drum, first track for reading by slip.
# e4=15    ;     10 _< e4  _< 17  , first core used by translator.
# e20=1022 ; 1005e4 _< e20 _< 1022, last   -    -   -      -
# e38=15   ;     10 _< e38 _< 200 , first core used by translated program.
# e37=1022 ;    800 _< e37 _< 1022, last   -    -   -      -         -
#          ;                       Note below: e37 = 1e37.
# e27=0    ;   0, arrays in core, e18 and e40 must also be 0.
#          ;   1,   -    -  buffer.
# e44=0    ;   0, translator medium is drum.
#          ;   1,     -        -    - a buffer medium.
# e18=0    ;   0, backing store is drum.
#          ; 400,    -      -   -  disc with block length 400.
#  	   ; 640,    -      -   -   -    -     -     -    640.
# e40=0    ; < 0, no tape units , SAMBA record   handling procedures are included.
#          ; = 0, -   -     -   ,   -     -          -        -       - not  -   .
# 	   ; > 0, e40 -     -   ,   -     - and tape -        -       -      -   .
# e69=4    ; 4 _< e69 _< 40 , SAMBA record segment length.

load_ga4 ()
{
  ga4param="$1"
  firsttrack="$2"

cat <<EOF
hide kb1
hide kb2
loadreader ../tapes/ga4/T1, L1 (26) 20.07.70.flx
$(maketext "r<")
$(maketext "e14=$firsttrack")
EOF
if [ ! -z "$ga4param" ]
then
  maketext "$ga4param"
fi
cat <<EOF
$(maketext "_l")
loadreader ../tapes/ga4/T2 (22) 13.01.69.flx
$(maketext "_l")
loadreader ../tapes/ga4/T3 (18) 3.10.68.flx
$(maketext "_l")
loadreader ../tapes/ga4/T4 (24) 14.04.70.flx
$(maketext "_l")
loadreader ../tapes/ga4/T5 (25) 14.04.70.flx
$(maketext "_l")
loadreader ../tapes/ga4/T6, L2 (20) 26.07.68.flx
$(maketext "_l")
loadreader ../tapes/ga4/T7, L3 (23) 20.01.69.flx
$(maketext "_l")
loadreader ../tapes/ga4/T8, L4 (19) 17.07.68.flx
$(maketext "_l")
loadreader ../tapes/ga4/T9, L5, M1 () 12.08.67.flx
$(maketext "r<")
$(maketext "_l")
loadreader ../tapes/ga4/P1 (1) 16.08.67.flx
$(maketext "r<")
$(maketext "$firsttrack")
$(maketext "_l")
$(maketext "d35=6")
loadpunch pass1${BUFTEXT}.flx
$(maketext "_l")
type 0
waitinput
finishpunch
loadpunch passes${BUFTEXT}.flx
type 0
waitinput
finishpunch
type 0
waitinput
quit
EOF
}

maketext ()
{
t="$1"
echo "# $1"
uc=0
echo -n "$1" | a2flx | od -t u1 -v -w1 >/tmp/maketext.tmp
while read -r line
do
  if [ ${#line} -gt 7 ]
  then
    c=${line:8}
    c=$((c))
    c1=$((c&0xe0))
    c2=$((c&0x0f))
    c=$((c1>>1 | c2))
    if [ $c -eq 58 ]
    then
      uc=0
    elif [ $c -eq 60 ]
    then
      uc=1
    fi
    echo TYPE $c
    echo "WAITINPUT"
  fi
done </tmp/maketext.tmp
if [ $uc -eq 1 ]
then
  echo TYPE 58
  echo "WAITINPUT"
fi
}

if [ $BUFFER -eq 1 ]
then
  BUFTEXT=buf
else
  BUFTEXT=nobuf
fi

DEMOFILE=makega4transient${BUFTEXT}.demo

if [ $BUFFER -eq 1 ]
then
  echo "loadconfig drum1buf.gier" >$DEMOFILE
  load_ga4 "e27=1" 117 >>$DEMOFILE
else
  echo "loadconfig drum1nobuf.gier" >$DEMOFILE
  load_ga4 "e27=0" 103 >>$DEMOFILE
fi

