#!/bin/sh

usage()
{
 echo 'usage: ${0##*/} [OPTIONS] '
 echo '     -b           set to batch duplex mode (increment by 2)'
 echo '     -c file      use specified config file'
 echo '     -d           default only. Do not read local config'
 echo '     -f           use Automatic Document Feeder'
 echo '     -h           display this help'
 echo '     -m MM        set Month'
 echo '     -n NUM       set Starting Page Number'
 echo '     -N name      set file prefix'
 echo '     -x SIZE      width in mm'
 echo '     -y SIZE      height in mm'
 echo '     -Y CCYY      set Year'
 echo ''
 echo '(c) 2002 www.bryra.com      Richard Bray'
}

cleanup()
{
  clear
  echo $1
  exit $2
}

defaults()
{
TIME=`date +'%Y%m%d%H%M'`
YEAR=`date +'%Y'`
MONTH=`date +'%m'`
DAY=`date +'%d'`
ASKFORSTARTNUM=0
SETBATCHDOUBLE=0
LOOKFORLASTNUM=1
ASKFORTIME='none'
SETDOUBLE=
ADFSTR=
WIDTH=215.9
HEIGHT=279.4
START_NUM=1
ADF=0
NOCONFIG=0
CONFIG_FILE="./.scan_docs"
}

defaults
#=================================================================
if [ -f $CONFIG_FILE ] && [ $NOCONFIG -eq 0 ] ; then
  . $CONFIG_FILE
fi
#=================================================================
while getopts ":fbN:x:y:Y:m:n:c:dh" opt; do
  case $opt in 
    b  ) SETBATCHDOUBLE=1
         ;;
    d  ) NOCONFIG=1
	defaults
         ;;
    f  ) ADF=1
         ;;
    N  ) NAME="${OPTARG}-"
         ;;
    x  ) WIDTH="$OPTARG"
         ;;
    y  ) HEIGHT="$OPTARG"
         ;;
    Y  ) YEAR=$(( $OPTARG + 0 ))
         ;;
    m  ) MONTH=$(( $OPTARG + 0 ))
         ;;
    n  ) START_NUM=$(( $OPTARG + 0 ))
         ;;
    c  ) if [ -f $OPTARG ] ; then
           CONFIG_FILE="$OPTARG" 
         else
           usage
           exit 1
         fi
         ;;
    h  ) usage
         exit 1
         ;;
    \? ) usage
         exit 1
  esac
done
shift $(($OPTIND -1))
#==================================================================
if [ $ADF -eq 1 ] ; then
  ADFSTR='Automatic Document Feeder'
fi
# name of docs
if [ "$NAME" = '' ] ; then
   NAME='image-'
fi
if [ "$SETBATCHDOUBLE" = "1" ] ; then
  SETDOUBLE='--batch-double'
fi
clear
# ask for time? [month | day | full ]
if [ "$ASKFORTIME" = 'month' ] ; then
  dialog --inputbox "What is the year?" 10 20 $YEAR 2>/tmp/dlgans$$
  if [ $? -eq 0 ] ; then
    YEAR=`cat /tmp/dlgans$$`
  else
    cleanup "Scan canceled." 3
  fi
  dialog --inputbox "What is the month?" 10 20 $MONTH 2>/tmp/dlgans$$
  if [ $? -eq 0 ] ; then
    MONTH=`cat /tmp/dlgans$$`
  else
    cleanup "Scan canceled." 4
  fi
  TIMESTAMP=`printf "%04d%02d%02d" $YEAR $MONTH 1`
fi

if [ $LOOKFORLASTNUM -eq 1 ] && [ $START_NUM -eq 1 ] ; then
  LAST=`ls *jpg *pnm 2>/dev/null |sed -e "s/\.jpg$//g" -e "s/\.pnm//g" -e "s/^$NAME\([0-9]*\)$/\1/g"|sort -n|tail -1`
  if [ $LAST -gt 0 ] ; then 
    START_NUM=$(( $LAST + 1 ))
  fi
fi
# ask for start number?
if [ $ASKFORSTARTNUM -eq 1 ] ; then
  dialog --inputbox "Starting Number" 8 20 $START_NUM 2>/tmp/dlgans$$
  if [ $? -eq 0 ] ; then
    START_NUM=`cat /tmp/dlgans$$`
  else
    cleanup "Scan canceled." 2
  fi
fi
clear
if [ "$ASKFORTIME" != 'none' ] ; then 
  NAME=`date --date="$TIMESTAMP" +"$NAME"`
fi
NAME="$NAME%d.pnm"

echo "finish: NAME: $NAME YEAR: $YEAR MONTH: $MONTH START_NUM: $START_NUM"
/usr/bin/scanimage --batch="$NAME" --mode Gray -x $WIDTH -y $HEIGHT --resolution 150 --batch-start=$START_NUM $SETDOUBLE --source="$ADFSTR" 2>/dev/null
if [ $ADF -eq 1 ] ; then
/usr/bin/scanimage --eject --source="$ADFSTR" >/dev/null 2>/dev/null
fi
for X in `ls *pnm 2>/dev/null`
do 
  JPG="${X%%.*}.jpg"
  if [ -f "$JPG" ] ; then
    dialog --yesno "Replace file $JPG?" 8 20
    if ! [ $? -eq 0 ] ; then
      cleanup "Scan canceled for $X" 6
    fi
    rm "$JPG"
  fi
  pnmtojpeg "$X" >"$JPG" && rm -f "$X"
done
clear
echo "scan: NAME: $NAME YEAR: $YEAR MONTH: $MONTH START_NUM: $START_NUM"
echo "DONE."

