#!/bin/ksh
#
# $Revision: 1.4 $ $Date: 2012-07-26 17:11:48-04 $
# $Source: /home/vogelke/bin/RCS/nl,v $
# $Host: sys7.com $
# $UUID: c9703757-7dfb-3dbb-aab9-15d2c66e031d $
#
#<nl: number lines, write new file with .nl extension.

PATH=/usr/local/bin:/usr/sfw/bin:/opt/sfw/bin:/bin:/usr/bin
export PATH

doprint () {
    file="$1"
    hdr="$2"
    test -f "$file" || { echo $file not found; exit 1; }

    # PR OPTIONS: set up for "lpr -h -Z'duplex' filename"
    #   -w80:    80-character lines
    #   -F:      Formfeeds separate pages
    #   -l58:    55 lines per page plus 3 for header
    #
    # Get total number of pages in document.

    popt='-w80 -F -l58'
    pages=`fold -80 $file |
           pr -h "$hdr" $popt |
           grep '   Page [0-9]*$' |
           tail -1 | sed -e 's/.*   Page //'`

    # NL OPTIONS
    #   -s'| ':  insert pipe-space between number and start of line
    #   -w4:     number is max 4 digits
    #   -nrn:    right justify numbers, no leading zeroes
    #   -ba:     number all lines
    #
    # Change final page number to read "Page n/total".

    expand $file |
        /usr/local/bin/nl -s'| ' -w4 -nrn -ba |
        sed -e 's/^...[12346789]/    /' |          # number every 5 lines.
        fold -80 |                                 # DON'T truncate.
        pr -h "$hdr" $popt |
        sed -e "s/    \(Page [0-9]*\)\$/\1\/$pages/"
}

case "$#" in
    0) file="/tmp/nl.$$.$RANDOM"
       cat - > $file
       doprint $file
       rm $file
       ;;

    *) for file in ${1+"$@"}; do
           outfile="$file.nl"
           exec 7>&1            # save stdout
           exec >"$outfile"
           doprint $file $file
           exec 1>&7            # restore stdout
           echo $outfile
       done
       ;;
esac

exit 0
