#!/bin/sh
# sambamultifax 0.1
# 
# uso: sambamultifax documento.ps 
# parametro 1 = documento postscript a enviar
# 
# se buscaran en el documento los tags BeginHylaFax-N�Destino y EndHylaFax para delimitar
# cada fax dentro de un mismo documento., se crearan tantos pdf como Faxes distintos
# se enviara cada documento a su numero destino (similar a sambafax)

# constants
SENDMAIL="/usr/sbin/sendmail"
PS2ASCII="/usr/bin/ps2ascii"
PS2PDF="/usr/bin/ps2pdf"
AWK="/bin/awk"
SENDFAX="/usr/bin/sendfax"
PID=$$

# creo una carpeta temporal

mkdir /tmp/${PID}

# make up a temporary file
FAXFILE=/tmp/${PID}/sambafax.$$.ps
PDFFILE=/tmp/${PID}/sambafax.$$.pdf
 
# retrieve the username and hostname from the paramaters
Username=$2
 
# if the samba user is anonumous then send mails to the postmaster
if [ "$Username" = "nobody" ];
   then
    MailTo="postmaster"
   else
    MailTo=${Username}
fi

# now dump the to-be faxewd data (PS fdormat) to the temp file
cat >${FAXFILE}       # this comes from the pipe (local mission)
cat $6 >>${FAXFILE}   # or this comes from samba as a file
BURSTBASE=`basename $FAXFILE .ps`


# convierto el postscript a pdf para trabajar con el

ps2pdf $FAXFILE $PDFFILE

PDFPAGES=`pdftk $PDFFILE dump_data | grep NumberOfPages | cut -d' ' -f2`

# creo un subdirectorio para el burst y otro para el final


mkdir /tmp/${PID}/burst
mkdir /tmp/${PID}/final

# y separo el documento en paginas dentro de ese directorio para analizarlo

pdftk $PDFFILE burst output /tmp/${PID}/burst/$BURSTBASE-%02d.pdf

p=1
PRIMERA=0
ULTIMA=0

lista=`ls /tmp/${PID}/burst/*.pdf`

# recorro las paginas buscando los tags para identificar la composicion de faxes a enviar

for i in $lista ; do 

    echo $i
    if [[ $PRIMERA == 0 ]] ; then
    	ENCUENTRA=`ps2ascii $i | grep -c BeginHylaFax`
    	echo $ENCUENTRA
    	if [[ $ENCUENTRA == 1 ]] ; then
        	PRIMERA=$p
        	ENCUENTRA=0
        	ENCUENTRA=`ps2ascii $i | grep -c EndHylaFax`
        	if [[ $ENCUENTRA == 1 ]] ; then echo Fax de una sola pagina $p
        	# Fax de una sola pagina, lo genero y lo envio con sendfax (falta reconocer y aislar el numero como en sambafax
        	pdftk $PDFFILE cat $PRIMERA-$PRIMERA output /tmp/${PID}/final/$BURSTBASE-final-$PRIMERA.pdf
        	PRIMERA=0
        	ENCUENTRA=0
        	fi
    	fi
    fi
    if [[ $PRIMERA != 0 ]] ; then 
    	ENCUENTRA=`ps2ascii $i | grep -c EndHylaFax`
     	if [[ $ENCUENTRA == 1 ]] ; then 
     		ULTIMA=$p
     		ENCUENTRA=0
     		# Preparo y envio el Fax con sendfax (falta reconocer y aislar el numero como en sambafax)
     		echo Fax desde pagina $PRIMERA hasta $ULTIMA
     		pdftk $PDFFILE cat $PRIMERA-$ULTIMA output /tmp/${PID}/final/$BURSTBASE-final-$PRIMERA-$ULTIMA.pdf
     		ULTIMA=0
     		PRIMERA=0
     	fi
    fi
    p=$(($p+1))
    done

# ahora envio todos los faxes 

lista=`ls /tmp/${PID}/final/*.pdf`
    
for i in $lista ; do

# retrieve the faxnumber from the printfile
# the silly three x's are added because some awk strugle with an immediate CR
# we use a PS to ascii pipe to strip (most of) the Postscript controls
FAXNUM=`${PS2ASCII} $i | ${AWK} '{ IGNORECASE=1 } /BeginHylaFax ?: ?[0-9-]*/ \
         {  $0=$0 "xxx"; \
            gsub(/-/,""); \
            anfang=match($0,/ ?: ?/); \
            anfang=anfang+match(substr($0,anfang),/[0-9]/)-1; \
            ende=match(substr($0,anfang),/[^0-9]/)-1; \
            printf ("%s",substr($0,anfang,ende)) \
         }' `
 
# if faxnumber is found fax the tempfile
# we donot check the validity of the faxnumber, let sendfax do this...
if [ "${FAXNUM}" = "" ] ; then
    (echo "To: ${MailTo}"
     echo "From: The HylaFAX Samba dancer "
     echo "Subject: your facsimile request failed"
     echo ""
     echo "The faxnumber is not recognized in your fax of"
     echo `date`
     echo ""
     echo "The faxnumber is recognised via this text:"
     echo "   BeginHylaFax : ddd-ddddddd"
     echo "No spaces or characters are allowed between the digits, just a -"
     echo ""
     echo "Please correct and retry"
    ) | 2>&1 ${SENDMAIL} -ffax -oi ${MailTo}
else
  ${SENDFAX} -n -D -f ${MailTo} -d ${FAXNUM} $i
fi
 
done

# remove the temp dir

rm -r /tmp/${PID}

 
# end of show

