#!/bin/bash
#
# Print a Pascal file on the local printer or screen using a2ps or alternative
#

# show brief help if no program specified on command line
if [ -z "$1" ]
then
   echo 'format & print a pascal file'
   echo usage:
   echo "  $0 [-option] 'file'"
   echo "  where option is:"
   echo "    -p -> print pascal file to printer"
   echo "    -s -> print to screen (default)"
   echo "    file is a pascal file, with or without the extension (.pas or .p)"
   exit 0
fi


if [ -f $1 ] && [ "`basename $1 .PAS`.PAS" = "`basename $1`" ] ; then
    PASFILE=`dirname $1`/`basename $1 .PAS`
    EXT=PAS
elif [ -f $1 ] && [ "`basename $1 .pas`.pas" = "`basename $1`" ] ; then
    PASFILE=`dirname $1`/`basename $1 .pas`
    EXT=pas
elif [ -f $1 ] && [ `basename $1 .p`.p = "`basename $1`" ] ; then
    PASFILE=`dirname $1`/`basename $1 .p`
    EXT=p
elif [ -f $1 ] && [ `basename $1 .pp`.pp = "`basename $1`" ] ; then
    PASFILE=`dirname $1`/`basename $1 .pp`
    EXT=pp
elif [ -f $1.pas ] ; then
    PASFILE=$1;
    EXT=pas
elif [ -f $1.p ] ; then
    PASFILE=$1;
    EXT=p
elif [ -f $1.pp ] ; then
    PASFILE=$1;
    EXT=pp
else
    echo "$0: can't find $1 or $1.pas or $1.pp or $1.p"
    exit 1
fi


SCREEN=1

if [ "$1" = "-p" ]; then
    SCREEN=0
    shift
else
    # default: output to screen
    # there are alternatives to ghostscript, eg okular, evince
    if [ "$1" = "-s" ]; then
        shift
    fi
    if which okular >/dev/null 2>&1 ; then
        PPR_VIEW=okular
    elif which evince >/dev/null 2>&1 ; then
        PPR_VIEW=evince
    elif which gs >/dev/null 2>&1 ; then
        PPR_VIEW=gs
    else
        echo "$0: can't find okular, evince or ghostscript for screen output"
    fi
    #echo "$0: screen output"
fi


PPR_CMD=
if which a2ps >/dev/null 2>&1 ; then
    if [ ! -e $P5CDIR/p5c.ssh ]; then
       echo "$0: can't find p5c style sheet - is \$P5CDIR set?"
    else

    # a2ps can be highly customised
    # edit these options for your required output style
    # type info a2ps for other options
    # --printer=display shows output on screen
    PPR_CMD="a2ps --verbose  --pretty-print=$P5CDIR/p5c.ssh \
         --borders=no --prologue=color --highlight-level=normal \
         --center-title --left-title --right-title \
        --portrait --columns=1 --rows=1 --header=$PASFILE.$EXT "
    fi

elif which enscript >/dev/null 2>&1 ; then

    PPR_CMD="enscript -E --color"

fi

# now do the output
if [ $SCREEN -eq 1 ] && [ -n "$PPR_VIEW" ] && [ -n "$PPR_CMD" ]; then
    PPR_TEMP=$(mktemp)
    $PPR_CMD -o - $PASFILE.$EXT > $PPR_TEMP && $PPR_VIEW $PPR_TEMP
    rm $PPR_TEMP
elif [ $SCREEN -eq 0 ] && [ -n "$PPR_CMD" ]; then
    $PPR_CMD $PASFILE.$EXT
else
    # fallback use pr command
    if [ $SCREEN -eq 1 ]; then
        pr $PASFILE.$EXT | less
    else
        pr $PASFILE.$EXT | lpr
    fi
fi
