#!/bin/bash
####################################################################
#                  PLADWKB                                         #
# This shell script plots the adwkb file using gnuplot.            #
# HDM 08/03                                                        #
####################################################################

#-----------------------------------------------------------------------
#  Definitions :
#-----------------------------------------------------------------------
if [ -d /tmpa ] && [ -w /tmpa ] ; then
   tmp="/tmpa"
elif [ -d /work ] && [ -w /work ] ; then
   tmp="/work"
elif [ -d /tmp ] && [ -w /tmp ] ; then
   tmp="/tmp"
elif [ -d "$HOME" ] && [ -w "$HOME" ] ; then
   tmp="$HOME"
else
   tmp="."
fi

gnuop=$tmp/gnu_options.${LOGNAME}_$$
gnupr=$tmp/gnu_print.${LOGNAME}_$$
adwkb=adwkb
ar="*"
xr="*"
yr="*"
zr="*"
lpr="no"
G=0
for option in $@; do
  if [ "$option" = "-P" ] ; then
    lpr="--"
  fi
done

purp="Purpose: Plot of the content of the adwkb file."
usage="Usage: pladwkb [-f -e -d -t -a -x -y -z -h] [-p | -P printer]"
help1='-h      : print this help text.'
help2='-f FILE : Use FILE rather than ./adwkb as input file.'
hlp2a='-d FIL2 : Use FIL2 as input file for a comparison data set.'
hlp2b='-e FIL3 : similar to -d. Thus at most three data sets may be shown.'
help3='-G      : draw grid lines.'
hlp3a='-t      : Plot the transl. mean-filed rather than Delta(E).'
help4='-a val  : set lower range of x to val.'
help5='-x val  : set upper range of x to val.'
help6='-y val  : set upper range of y to val.'
help7='-z val  : set lower range of y to val.'
help8='-p      : prompt for printing the plot at default printer lpr.'
help9='-P printer : specify alternative printer'
help10='(e.g. -P "| lpr -Pps2"  or  -P file).'

#-----------------------------------------------------------------------
# Define function rdtadwkb and rdeadwkb.
#-----------------------------------------------------------------------

rdtadwkb() {            # Reading TMF
   read cnt
   i=1
   while [ $i -le $cnt ] ; do
      read LINE
      echo $LINE >> $gnuop
      i=$(($i+1))
   done
}

rdeadwkb () {           # Reading Delta(E)
   read cnt
   i=1
   while [ $i -le $cnt ] ; do
      read LINE
      i=$(($i+1))
   done
   while read LINE ; do
      echo $LINE >> $gnuop
   done
}


#-----------------------------------------------------------------------
#  Read the options (if any).
#-----------------------------------------------------------------------

while getopts ":htd:e:f:a:x:y:z:GrpP:" opt; do
    case $opt in
    h  ) echo $purp
         echo $usage
         echo ' '"$help1"
         echo ' '"$help2"
         echo ' '"$hlp2a"
         echo ' '"$hlp2b"
         echo ' '"$help3"
         echo ' '"$hlp3a"
         echo ' '"$help4"
         echo ' '"$help5"
         echo ' '"$help6"
         echo ' '"$help7"
         echo ' '"$help8"
         echo ' '"$help9 $help10"
         echo ' '
         exit ;;
    G  ) G=1 ;;
    d  ) d_adwkb=$OPTARG ;;
    e  ) e_adwkb=$OPTARG ;;
    f  ) adwkb=$OPTARG ;;
    t  ) tmf=1 ;;
    a  ) ar=$OPTARG ;;
    x  ) xr=$OPTARG ;;
    y  ) yr=`echo $OPTARG | tr 'd' 'e'`;;
    z  ) zr=`echo $OPTARG | tr 'd' 'e'`;;
    p  ) lpr="| lpr" ;;
    P  ) lpr=$OPTARG ;;
    \? ) echo ' Unkown option!'
         echo $usage
         echo ' -h provides a help text.'
         exit 1 ;;
  esac
done
shift $(($OPTIND - 1))

if [ -z "${lpr##-*}" ] || [ "$lpr" != "${lpr#[0-9]}" ] ; then
  echo ' No printer specified with the -P option!'
  echo ' Example :  pladwkb -P "| lpr -Pps2"  :  prints to ps2-printer.'
  echo ' Example :  pladwkb -P prfile  :  writes postscript-output '
  echo '                                   to the file "prfile".'
  echo
  echo $usage
  echo ' '$help1
  echo ' '$help2
  echo ' '$hlp2a
  echo ' '$hlp2b
  echo ' '$help3
  echo ' '$hlp3a
  echo ' '$help4
  echo ' '$help5
  echo ' '$help6
  echo ' '$help7
  echo ' '$help8
  echo ' '"$help9 $help10"
  exit 2
fi


if [ ! -r $adwkb ] ; then
   echo "Sorry, the file $adwkb does not exist!"
   echo "pladwkb is outdated, use plenerd"
   exit
fi


#-----------------------------------------------------------------------
#  Write GNU options file.
#-----------------------------------------------------------------------
echo 'set style data lines'        > $gnuop
echo 'set nologscale'             >> $gnuop
echo 'set xrange ['$ar':'$xr']'   >> $gnuop
echo 'set yrange ['$zr':'$yr']'   >> $gnuop
if [ "$G" = "1" ] ; then
    echo 'set grid'               >> $gnuop
fi
if [ "$tmf" = "1" ] ; then
    echo 'set xlabel "R [au]"'    >> $gnuop
    echo 'set ylabel "V [eV]"'    >> $gnuop
else
    echo 'set xlabel "E [eV]"'    >> $gnuop
    echo 'set ylabel "Delta"'     >> $gnuop
fi
if [ -z "$d_adwkb" ] && [ -z "$e_adwkb" ] ; then
   echo 'plot "-"  using 1:2 notit'  >> $gnuop
elif [ -n "$d_adwkb" ] && [ -n "$e_adwkb" ] ; then
   echo 'plot "-"  us 1:2 tit "f", "-"  us 1:2 tit "d", "-"  us 1:2 tit "e" '\
                                     >> $gnuop
else
   echo 'plot "-"  us 1:2 tit "f", "-"  us 1:2 tit "d"'  >> $gnuop
fi
if [ -z "$tmf" ] ; then
   rdeadwkb < $adwkb
else
   rdtadwkb < $adwkb
fi

if [ -n "$d_adwkb" ] ; then
   if [ ! -r $d_adwkb ] ; then
      echo "Sorry, the file $d_adwkb does not exist!"
      exit
   fi
   echo 'e' >> $gnuop
   if [ -z "$tmf" ] ; then
      rdeadwkb < $d_adwkb
   else
      rdtadwkb < $d_adwkb
   fi
fi
if [ -n "$e_adwkb" ] ; then
   if [ ! -r $e_adwkb ] ; then
      echo "Sorry, the file $e_adwkb does not exist!"
      exit
   fi
   echo 'e' >> $gnuop
   if [ -z "$tmf" ] ; then
      rdeadwkb < $e_adwkb
   else
      rdtadwkb < $e_adwkb
   fi
fi


#-----------------------------------------------------------------------
#  Call gnuplot.
#-----------------------------------------------------------------------

gnuplot -geometry +0+0 -persist "$gnuop"

if [ "$lpr" != "no" ] ; then
  echo ' Print the plot to "'$lpr'" ?   (y/n; return=no) '
  read print
  if [ ${print:-n} = 'y' ]  ; then
     echo 'set terminal postscript' > $gnupr
     echo 'set output "'$lpr'" '   >> $gnupr
     gnuplot "$gnupr" "$gnuop"
     /bin/rm -f $gnupr
  fi
fi
/bin/rm -f $gnuop
exit



exit

