Tim Waugh 3b8dbc
#!/bin/bash
Tim Waugh 3b8dbc
## Copyright (C) 2003-2006 Red Hat, Inc.
Tim Waugh 3b8dbc
## Copyright (C) 2003-2006 Tim Waugh <twaugh@redhat.com>
Tim Waugh 5f9fde
## Changed on 2007/05/17, Opher Shachar, LADPC Ltd.
Tim Waugh 5f9fde
##     Added support for page-ranges option.
Tim Waugh 5f9fde
##     Added page accounting.
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
## This program is free software; you can redistribute it and/or modify
Tim Waugh 3b8dbc
## it under the terms of the GNU General Public License as published by
Tim Waugh 3b8dbc
## the Free Software Foundation; either version 2 of the License, or
Tim Waugh 3b8dbc
## (at your option) any later version.
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
## This program is distributed in the hope that it will be useful,
Tim Waugh 3b8dbc
## but WITHOUT ANY WARRANTY; without even the implied warranty of
Tim Waugh 3b8dbc
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Tim Waugh 3b8dbc
## GNU General Public License for more details.
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
## You should have received a copy of the GNU General Public License
Tim Waugh 3b8dbc
## along with this program; if not, write to the Free Software
Tim Waugh 3b8dbc
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
if [ $# == 0 ]; then
Tim Waugh 3b8dbc
  echo >&2 "ERROR: $0 job-id user title copies options [file]"
Tim Waugh 3b8dbc
  exit 1
Tim Waugh 3b8dbc
fi
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
# Extract the papersize
Tim Waugh 3b8dbc
SENDFF=`grep '^\*DefaultSendFF' "$PPD" | cut -d\  -f2`
Tim Waugh 3b8dbc
COPIES=1
Tim Waugh 3b8dbc
if [ $# -ge 4 ]; then
Tim Waugh 3b8dbc
  COPIES="$4"
Tim Waugh 3b8dbc
fi
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
if [ "$COPIES" -gt 1 ] && [ $# -lt 6 ]; then
Tim Waugh 3b8dbc
  unset TMPFILE
Tim Waugh 3b8dbc
  trap -- 'rm -f "$TMPFILE"' EXIT
Tim Waugh 3b8dbc
  TMPFILE=$(mktemp ${TMPDIR:-/tmp}/textonly.XXXXXX)
Tim Waugh 3b8dbc
  cat > "$TMPFILE"
Tim Waugh 3b8dbc
else
Tim Waugh 3b8dbc
  TMPFILE="$6"
Tim Waugh 3b8dbc
fi
Tim Waugh 3b8dbc
Tim Waugh 5f9fde
PR=${5#*page-ranges=}
Tim Waugh 5f9fde
# Do options specify page-ranges?
Tim Waugh 5f9fde
if [[ "$PR" != "$5" ]]; then
Tim Waugh 5f9fde
  PR=${PR%% *}
Tim Waugh 5f9fde
else
Tim Waugh 5f9fde
  #unset PR
Tim Waugh 5f9fde
  PR=1-999999
Tim Waugh 5f9fde
fi
Tim Waugh 5f9fde
Tim Waugh 5f9fde
if [[ "$PR" ]]; then
Tim Waugh 5f9fde
  TMPFILE2=$(mktemp ${TMPDIR:-/tmp}/textonly2.XXXXXX)
Tim Waugh 5f9fde
  pagenum=0
Tim Waugh 5f9fde
  EOF=
Tim Waugh 5f9fde
  { 
Tim Waugh 5f9fde
  while [[ "$PR" ]]; do
Tim Waugh 5f9fde
    pl=${PR%%,*}		;# take first subrange
Tim Waugh 5f9fde
    PR=${PR#$pl};PR=${PR#,}	;# remove from range list
Tim Waugh 5f9fde
    pu=${pl#*-}			;# extract upper and lower
Tim Waugh 5f9fde
    pl=${pl%-*}			;# pages of subrange
Tim Waugh 5f9fde
    # Allows interpreting 0-5,3-10 as 1-5,6-10 rejects 5-1 or 1-
Tim Waugh 5f9fde
    (( pagenum >= pl )) && pl=$(( pagenum + 1 ))
Tim Waugh 5f9fde
    (( pl > pu )) && continue
Tim Waugh 5f9fde
    
Tim Waugh 5f9fde
    # Loop reading pages until at or over lower page of subrange.
Tim Waugh 5f9fde
    while read -d `echo -ne '\f'` -r; do
Tim Waugh 5f9fde
      (( pagenum++ ))
Tim Waugh 5f9fde
      (( pagenum == pl )) && break
Tim Waugh 5f9fde
    done
Tim Waugh 5f9fde
    # Did we reach lower page of subrange or EOF?
Tim Waugh 5f9fde
    if (( pagenum < pl )); then
Tim Waugh 5f9fde
      [[ ! "$REPLY" ]] && break		;# empty last page - we're done.
Tim Waugh 5f9fde
      (( pagenum++ ))
Tim Waugh 5f9fde
      EOF=y
Tim Waugh 5f9fde
    fi
Tim Waugh 5f9fde
    # Output page and report to page log
Tim Waugh 5f9fde
    if (( pagenum == pl )); then
Tim Waugh 5f9fde
      echo -n "${REPLY}" >>"$TMPFILE2"
Tim Waugh 5f9fde
      # If EOF then page has no final FF
Tim Waugh 5f9fde
      [[ ! "$EOF" ]] && echo -ne '\f' >>"$TMPFILE2"
Tim Waugh 5f9fde
      echo "PAGE: $pagenum $COPIES" >&2
Tim Waugh 5f9fde
    fi
Tim Waugh 5f9fde
    [[ "$EOF" ]] && break
Tim Waugh 5f9fde
    # Is the current subrange a single page?
Tim Waugh 5f9fde
    (( pagenum == pu )) && continue
Tim Waugh 5f9fde
    while read -d `echo -ne '\f'` -r; do
Tim Waugh 5f9fde
      (( pagenum++ ))
Tim Waugh 5f9fde
      echo -ne "${REPLY}\f" >>"$TMPFILE2"
Tim Waugh 5f9fde
      echo "PAGE: $pagenum $COPIES" >&2
Tim Waugh 5f9fde
      (( pagenum == pu )) && break
Tim Waugh 5f9fde
    done
Tim Waugh 5f9fde
    # Could be that we reached EOF before page boundry
Tim Waugh 5f9fde
    if (( pagenum < pu )); then
Tim Waugh 5f9fde
      if [[ "$REPLY" ]]; then
Tim Waugh 5f9fde
        (( pagenum++ ))
Tim Waugh 5f9fde
        echo -n "${REPLY}" >>"$TMPFILE2"
Tim Waugh 5f9fde
        echo "PAGE: $pagenum $COPIES" >&2
Tim Waugh 5f9fde
      fi
Tim Waugh 5f9fde
      break
Tim Waugh 5f9fde
    fi
Tim Waugh 5f9fde
  done
Tim Waugh 5f9fde
  } <"$TMPFILE"
Tim Waugh 5f9fde
else
Tim Waugh 5f9fde
  TMPFILE2="$TMPFILE"
Tim Waugh 5f9fde
  pc=$(grep -co `echo -ne '\f'` "$TMPFILE2")
Tim Waugh 5f9fde
  pc=$(( pc * $COPIES ))
Tim Waugh 5f9fde
  echo "PAGE: $pc" >&2
Tim Waugh 5f9fde
fi
Tim Waugh 5f9fde
Tim Waugh 3b8dbc
while [ "$COPIES" -gt 0 ]; do
Tim Waugh 3b8dbc
  # Just translate LF->CRLF at the moment, until the PPD has options added.
Tim Waugh 5f9fde
  sed -e 's/$/'`echo -ne '\r'`'/g' "$TMPFILE2"
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
  if [ "$SENDFF" == "True" ]
Tim Waugh 3b8dbc
    then
Tim Waugh 3b8dbc
    echo -ne \\14
Tim Waugh 3b8dbc
  fi
Tim Waugh 3b8dbc
Tim Waugh 3b8dbc
  COPIES=$(($COPIES - 1))
Tim Waugh 3b8dbc
done
Tim Waugh 5f9fde
# Cleanup
Tim Waugh 5f9fde
[[ "$TMPFILE" != "$TMPFILE2" ]] && rm -f "$TMPFILE2"
Tim Waugh 5f9fde
exit 0