#!/bin/sh

# Shellscript mit " chmod u+x dateiname " freigeben!

# Aufruf: VM_mar_check Filename       (Filename kann Pfad enthalten!)

# Funktion: berprft MAR-File auf Richtigkeit 

i=$1 

if test -r $1
 then :
 else
  echo "Error:" $1 "is not a readable file!"
  exit 1
fi

n=`echo $1 | sed 's#.*\/\([0-9a-z\.]*\)$#\1#'`
echo $n
rumpf=`echo $n | sed 's/.mar//'`
language=`echo $rumpf | sed 's/[0-9][0-9][0-9][ab][tcr]//'`

if test $language = "m"
 then

  # mulitilingual***********************************************************

  # Syntaxcheck
  a=`cat $i | egrep -e "^[0-9][0-9]* [0-9][0-9]* ${rumpf}.[1234]_[0-9][0-9][0-9]_[A-Z][A-Z][A-Z]_[EGJ][NEA][GRP]$" | wc -l`
  length=`cat $i | wc -l`

  if test $a -ne $length
   then
    echo "Error in mar-file!!"
  fi

  # Besteht Marfile nur aus 2 oder mehr Sprecherkrzeln?

  refchannos=`cat $i | sed "s/[0-9][0-9]* [0-9][0-9]* ${rumpf}.\([1-9]\)_[0-9][0-9][0-9]_[A-Z][A-Z][A-Z]_[EGJ][NEA][GRP]/\1/" | sort | uniq`

  spks=`cat $i | sed "s/[0-9][0-9]* [0-9][0-9]* ${rumpf}.[1234]_[0-9][0-9][0-9]_\([A-Z][A-Z][A-Z]\)_[EGJ][NEA][GRP]/\1/" | sort | uniq`
  lena=`echo $spks | wc -c`

  for spk in $spks
   do 
    marstart=`egrep -e $spk $i | sed "s/[0-9][0-9]* [0-9][0-9]* ${rumpf}.\([1-9]\)_[0-9][0-9][0-9]_[A-Z][A-Z][A-Z]_[EGJ][NEA][GRP]/\1/" | sort | uniq`
    channos=$channos$marstart
   done
  channos=`echo $channos | sort `

  if test "$channos" = "$refchannos"
   then 
    echo "Error: Too many channels or speaker ids in mar-file!"   
  fi

  a=`echo $rumpf | sed 's/.....$//'`
  if test $a = "m"
   then
    if test $lena -gt 16
     then 
      echo "Error: More than 4 speaker ids in mar-file!"
    fi
   else
    if test $lena -gt 8
     then 
      echo "Error: More than 2 speaker ids in mar-file!"
    fi
  fi


  count=0
  while test $count -lt $length 
   do

    # Kommen alle Turnnummern vor?

    a=`cat $i | egrep -e "^[0-9][0-9]* [0-9][0-9]* ${rumpf}.[1234]_0*${count}_[A-Z][A-Z][A-Z]_[EGJ][NEA][GRP]$"`
    if test "$a" = ""
     then
      echo "Error in turn nr." $count or turn missing!
    fi

    # Ist Zahl in der Linken Spalte kleiner als Zahl in der rechten?

    aa=`echo $a | awk '{printf("%s", $1)}'`
    ab=`echo $a | awk '{printf("%s", $2)}'`
    if test "$aa" = "" -o "$ab" = ""
     then
      b=0
      echo Error in turn $count! 
     else
      b=`expr $aa - $ab`
    fi
    if test $b -gt 0
     then 
      echo Error in turn $count: begin of turn greater than end of turn!
    fi 
    count=`expr $count + 1`
   done 

 else
  # not multilingual *****************************************************

  # Syntaxcheck
  a=`cat $i | egrep -e "^[0-9][0-9]* [0-9][0-9]* ${rumpf}.[1234]_[0-9][0-9][0-9]_[A-Z][A-Z][A-Z]$" | wc -l`
  length=`cat $i | wc -l`

  if test $a -ne $length
   then
    echo "Error in mar-file!!"
  fi

  # Besteht Marfile nur aus 2 oder mehr Sprecherkrzeln?

  refchannos=`cat $i | sed "s/[0-9][0-9]* [0-9][0-9]* ${rumpf}.\([1-9]\)_[0-9][0-9][0-9]_[A-Z][A-Z][A-Z]/\1/" | sort | uniq`

  spks=`cat $i | sed "s/[0-9][0-9]* [0-9][0-9]* ${rumpf}.[1234]_[0-9][0-9][0-9]_//" | sort | uniq`
  lena=`echo $spks | wc -c`

  for spk in $spks
   do 
    marstart=`egrep -e $spk $i | sed "s/[0-9][0-9]* [0-9][0-9]* ${rumpf}.\([1-9]\)_[0-9][0-9][0-9]_[A-Z][A-Z][A-Z]/\1/" | sort | uniq`
    channos=$channos$marstart
   done
  channos=`echo $channos | sort `

  if test "$channos" = "$refchannos"
   then 
    echo "Error: Too many channels or speaker ids in mar-file!"   
  fi

  a=`echo $rumpf | sed 's/.....$//'`
  if test $a = "m"
   then
    if test $lena -gt 16
     then 
      echo "Error: More than 4 speaker ids in mar-file!"
    fi
   else
    if test $lena -gt 8
     then 
      echo "Error: More than 2 speaker ids in mar-file!"
    fi
  fi


  count=0
  while test $count -lt $length 
   do

    # Kommen alle Turnnummern vor?

    a=`cat $i | egrep -e "^[0-9][0-9]* [0-9][0-9]* ${rumpf}.[1234]_0*${count}_[A-Z][A-Z][A-Z]$"`
    if test "$a" = ""
     then
      echo "Error in turn nr." $count or turn missing!
    fi

    # Ist Zahl in der Linken Spalte kleiner als Zahl in der rechten?

    aa=`echo $a | awk '{printf("%s", $1)}'`
    ab=`echo $a | awk '{printf("%s", $2)}'`
    if test "$aa" = "" -o "$ab" = ""
     then
      b=0
      echo Error in turn $count! 
     else
      b=`expr $aa - $ab`
    fi
    if test $b -gt 0
     then 
      echo Error in turn $count: begin of turn greater than end of turn!
    fi 
    count=`expr $count + 1`
   done 
fi
