🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sys.next.misc
2 messages
2 total messages Started by aoml Mon, 27 Jul 1992 22:00
Question about printing multiple documents...
#462
Author: aoml
Date: Mon, 27 Jul 1992 22:00
9 lines
655 bytes
I am currently programing a very large application.  It would be nice if I
could print several files with one command.  Does anyone know of a utility
which would do this?  I prefer non-commercial (of course) software.  If there
is a unix command that would accomplish the same thing, that would be fine.

Thanks in advance,

Kevin
(Please E-Mail Answers)
Re: Question about printing multiple documents...
#493
Author: Sherwood Botsford
Date: Tue, 28 Jul 1992 19:21
453 lines
15456 bytes
aoml@enh.nist.gov writes
> I am currently programing a very large application.  It would be nice if I
> could print several files with one command.  Does anyone know of a utility
> which would do this?  I prefer non-commercial (of course) software.  If there
> is a unix command that would accomplish the same thing, that would be fine.
> 
> Thanks in advance,
> 
> Kevin
> (Please E-Mail Answers)

see lpd

However, paf is neater, in that it defaults to 2 up, prints the filename and  
date on the bottom, your name (Handy if 15 people use the same printer)

Below is the paf script.
ON fenris==>cat /usr/local/bin/paf
#! /bin/sh
# @(#) paf Shell script to Print Ascii Files
#
# This routine generates file listings on postscript printers.  The command
# arguments are the names of the files to print.  If no arguments are given
# the standard input is used.  The following options may be specified:
#
# Stolen from Jim Hoover (hoover)
# Modifyed by Anthony Mutiso
# Modified by Bob Beck 
#
# $Revision: 1.9 $
# $Date: 90/06/11 09:47 $
#
# $Log: paf,v $
# Revision 1.9  90/06/11  09:47:21  beck
# ported to seymour, changed printers, man page.
# fixed help so that it displays defaults for env vars PRINTER
# and USER.
# modified to use awk instead of nawk. 
#
# Revision 1.8  90/05/07  12:41:24  anthony
# Fixed a PATH string, and the help message printing.
# Anthony
# 
# Revision 1.7  89/10/11  00:12:44  anthony
# FIxed -n Bug
# Fixed the echoing to work with the vax which does
# not have /usr/5bin/echo
# 
# Revision 1.6  89/09/25  12:28:28  anthony
# Added Umask 066 for file creation protection
# Fixed the width option to work correctly
# Corrected Usage string printing, and 1 Col Portrait mode default
# Converted echoing to use /usr/5bin/echo
# 
# Revision 1.5  89/06/29  14:58:36  anthony
# Fixed stdin bug
# Added -V for version option.
# 
# Revision 1.4  89/05/29  14:09:00  anthony
# Added -P<spool> command option to simulate lpr(1) style options.
# 
# Revision 1.3  89/05/29  13:22:37  anthony
# Improved date string handling
# Will no longer spool empty files
# Checks for unaccessable files in read access on files to be printed
# Invalidates unrecognized command options.
# Comment: Good for Release.
# 
# Revision 1.2  89/05/29  13:16:52  anthony
# Major clean up
# 
# Revision 1.1  89/05/26  15:08:00  anthony
# Initial revision
# 
# Revision 1.1  89/05/26  15:06:26  anthony
# Initial revision
# 
#
# Man page /usr/cavell/u1/grad/anthony/man/manl/paf.l
#
# REMARKS
# -------

# The default values for characters per column and lines per page are:

#       Format          Columns         -width  -length
#       ---------------------------------------------
#       Portrait        1                 80      53
#       Portrait        2                 80     109
#       Landscape       1                132      49
#       Landscape       2                 80      61
#       Otherwise                         80    auto

# If you specify only "width" then "length" is calculated automatically  
according
# to the number of lines that fit with the font size that holds the cpl.
# If you specify the lpp the font will be anamorphically scaled to fit the
# "width" and "length" in one column.

# Any ^L found in the data will cause a new page to be started.  The first
# character after the ^L will start the first line of the new page.

# --------------------

# SET DEFAULTS

# set -x # DEBUG

trap "/bin/rm -f $tmpfile" 15 

PATH=/usr/new/bin:/usr/local/bin:/bin:/usr/bin:/usr/ucb:/usr/5bin; export PATH

umask 066       # Make all created files readonly to user
script=/usr/local/lib   # Place where support files can be found.
ECHO="echo"

userstring="User: $USER"
case "$1" in
   -us*) ;;
   help|Help|HELP|-H*|-h*) ;;
   *)
   eval `date | awk '{
      printf ("dateline=\"%s %s %s %s %s %s\"; ", $1, $2, $3, $4, $5, $6)
      printf ("date=\"Date: %s %s, %s\"; ", $2, $3, $6)
      printf ("time=\" -- Time: %s\"\n", $4)}'`;;
esac


name=`basename $0`
usage1="usage: $name [-form[at]|-fmt P|L] [-col[umns] n] [-wi[dth] n]  
[-len[gth] n]"
usage2="        [-ti[tle] string] [-P[rinter] string] [-D[ate] string] [-T[ime]  
string]"
usage3="        [-U[ser] string] [-v] [-s] [-n] [-m[ail]] [-o[utput] file|-]  
[-q[uite]]"
usage4="        [-us[age]|-h[elp]] [-V]"
printeropts="-h"

revision='$Revision: 1.9 $ $Date: 90/06/11 09:47 $'
fmtopt=L
catopts=""
outopt="--"
widthopt=0
lengthopt=0                     # 0 ==> auto
quietopt=0
fileprefix="File: "
hdrprefix=""
userprefix=""
defprinter="lp"

if [ "$PRINTER" ]; then printer=$PRINTER; fi 

if [ $# -eq 0 ]; then
   inputfiles="--"
else

   while :
   do
       case "$1" in
            -fmt|-form*)
               if [ "$2" = "P" -o "$2" = "p" -o "$2" = "L" -o "$2" = "l" ];  
then
                  fmtopt=$2
                  if [ $# -gt 1 ]; then
                     shift
                  else
                     $ECHO "$name: insufficient options."
                     exit 2
                  fi
               else
                  $ECHO $name error
                  $ECHO "$usage1"; $ECHO "$usage2"; $ECHO "$usage3"; $ECHO  
"$usage4"
                  exit 2
               fi;;
            -col*)
               colsopt=$2
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -wi*)
               widthopt=$2
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -len*)
               lengthopt=$2
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -ti*)
               titleopt="$2"
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -P*)
               case "$1" in
                  -Pws)
                     printer="ws";;
                  -Pgr)
                     printer="gr";;
                  -P|-Print*)
                     printer="$2"
                     if [ $# -gt 1 ]; then
                        shift
                     else
                        $ECHO "$name: insufficient options."
                        exit 2
                     fi;;
                  *)
                    $ECHO "$name: Invalid printer name ($1)"; exit 2;;
               esac;;
            -D|-Date*) date="$2"
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -T|-Time*) time="$2"
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -U|-User*) userstring="$2"
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -V)
               $ECHO "$name: $revision" | sed 's/\$//g';
               exit 0;;
            -o|-out*)
               outopt="$2"
               if [ $# -gt 1 ]; then
                  shift
               else
                  $ECHO "$name: insufficient options."
                  exit 2
               fi;;
            -m|-mail*)
               printeropts="$printeropts -m";;
            -s)
               catopts="$catopts -s";;
            -v)
               catopts="$catopts -v";;
            -n)
               catopts="$catopts -n";;
            -q*)
               quietopt=1;;
         -us*)
               $ECHO "$usage1"; $ECHO "$usage2"; $ECHO "$usage3"; $ECHO  
"$usage4"
               exit 0;;
         help|Help|HELP|-H*|-h*)
               cat >&1 << EOF-HELP-MESSAGE
$name (Print Ascii File) usage: $name [options] files...
where options are the following
-fmt            [P|L]   Generates the listing in Portrait or Landscap
                        format, default is Landscape format.
-form[at]       [P|L]   Same a -fmt
-col[umns]      number  Generates the listing in "n" columns per page, default
                        is two columns for landscape mode and one for portrait.
-wi[dth]        number  Generates the listing with room for "n" characters
                        per column. default is 80.
-len[gth]       number  Generates the listing with room for "number" lines per
                        page. default is 57 in landscape, 55 in portrait.
-ti[tle]        string  Specifies the title for each listing page,
                        default is the input file names.
-P[rinter]      string  Specifies the printer to use, default is currently 
                        "$PRINTER", from your PRINTER environment variable
                        (if defined - "lp" if not).
                        "string" should be one of "ws" or "gr".
-P<spool>               Where <spool> is one of "consult" "netlw" "genoffntx"
                        or "demonext".
-D[ate]         string  Specifies the date string to be used, default is 
                        calculated date today.
-T[ime]         string  Specifies the time string to be used, default is 
                        the time current time.
-U[ser]         string  Specifies the user string to be used, default is 
                        currently "$USER", from your USER environment variable
-v                      Runs input through cat -v to hide control characters,
                        default is off.
-s                      Runs input through cat -s to squeeze white space,
                        default is off.
-n                      Add line numbers to the listing, default is off.
-m[ail]                 Mail user when file is printed.
-o[utput]       file|-  Sends the output to the file file or to standard  
output,
                        if option is - send output stdout (sets -q option).
-q[uiet]                Run quietly (do not generate "placate the user  
messages").
-us[age]                Give some help messages.
-h[elp]                 Same as -usage.
-V                      Print revision information.
.........              See 'man $name' for more help.

EOF-HELP-MESSAGE
               exit 0;;
         -*)
               $ECHO "$name: invalid option ($1)"
               $ECHO "$usage1"; $ECHO "$usage2"; $ECHO "$usage3"; $ECHO  
"$usage4"
               exit 0;;
         *)
               inputfiles="$inputfiles $1";;
       esac
       if [ $# -gt 1 ]; then shift; else break; fi
   done

   if [ ! "$inputfiles" ]; then inputfiles="--"; fi

fi

# IS THE PRINTER SET YET?
if [ "$outopt" = "--" ]; then
   if [ ! "$printer" ]; then 
      printer=$defprinter;
      $ECHO "$name: Using printer ""$printer""."
   fi
fi

# QUIET IF I AM WRITING TO STDOUT
if [ "$outopt" = "-" ]; then quietopt=1; fi

# SET OTHER OPTION

if [ ! "$colsopt" ]; then
   if [ "$fmtopt" = "L" ]; then
      colsopt=2
   else
      colsopt=1
   fi
fi
datestring="$date$time"
hostname=`hostname`

case "$fmtopt$colsopt" in
   "P1") if [ $widthopt -eq 0 ]; then cpc=80; foldopt=-80
         else cpc=$widthopt; foldopt=-$widthopt; fi;;
   "P2") if [ $widthopt -eq 0 ]; then cpc=80; foldopt=-80
         else cpc=$widthopt; foldopt=-$widthopt; fi;;
   "L1") if [ $widthopt -eq 0 ]; then cpc=132; foldopt=-132
         else cpc=$widthopt; foldopt=-$widthopt; fi;;
   "L2") if [ $widthopt -eq 0 ]; then cpc=80; foldopt=-80
         else cpc=$widthopt; foldopt=-$widthopt; fi;;
   *)    if [ $widthopt -eq 0 ]; then cpc=80; foldopt=-80
         else cpc=$widthopt; foldopt=-$widthopt; fi;;
esac

# BEGIN PROCESSING
# Process each file separately.

tmpfile=/tmp/$name.$$

for file in $inputfiles; do

    if [ \( -f "$file" -a -r "$file" \) -o "$file" = "--" ]; then
       processedfiles="$processedfiles $file"
      if [ $quietopt -eq 0 ]; then
         if [ "$file" != "--" ]; then
            $ECHO "$name: processing file '$file'."
         else
            $ECHO "$name: processing 'standard input'."
         fi
      fi
    else
       if [ $quietopt -eq 0 ]; then
          $ECHO "$name: file $file not found!"
       fi
       continue
    fi

    if [ "$titleopt" ]; then hdr="$titleopt";
    elif [ "$file" = "--" ]; then hdr="standard input";
    else hdr="$fileprefix$file";
    fi

    (
#       $ECHO "%%Title: $USER@$hostname/$name->ps"
#       $ECHO "%%DocumentFonts:"
#       $ECHO "%%Creator: $name->ps"
#       $ECHO "%%CreationDate: $dateline"
#       $ECHO "%%Pages: (atend)"
#       $ECHO "%%For: $USER@$hostname"
#       $ECHO "%%EndComments"
        $ECHO "%!"
        $ECHO "save"
        $ECHO "/dateIs   ($datestring) def"
        $ECHO "/headIs   ($hdrprefix$hdr)  def"
        $ECHO "/userIs  ($userprefix$userstring) def"
        $ECHO "/fmtIs    ($fmtopt)  def"
        $ECHO "/nCols    $colsopt   def"
        $ECHO "/CPC      $cpc    def"
        $ECHO "/LPP      $lengthopt    def"

        cat $script/print.ps

#
#       expand tabs into spaces,  number/compress/fold lines.
#       escape the special characters ( ) and / inside the postscript string.  
#       make each line into the postscript command ( line ) doLine

        if [ "$file" = "--" ]; then expand; else expand "$file"; fi |
        if [ "$catopts" != "" ]; then cat $catopts | fold $foldopt; else fold  
$foldopt; fi |
        sed -e 's/\\/\\\\/g' -e 's/(/\\(/g' -e 's/)/\\)/g' -e 's/.*/(&)  
doLine/'

        $ECHO "newPage restore"

        ) | if [ "$outopt" = "--" ]; then
               cat >> $tmpfile
            elif [ "$outopt" = "-" ]; then
                 cat 
            else $ECHO "" > $outopt; cat >> $outopt
            fi
    done

if [ "$outopt" = "--" ]; then
   if [ "$processedfiles" ]; then
      lpr -P$printer $printeropts $tmpfile
   fi
   /bin/rm -f $tmpfile
   outstream="printer $printer"
elif [ "$outopt" = "-" ]; then
   outstream="stdout"
else outstream="$outopt"
fi

if [ "$quietopt" -eq 0 ]; then
   if [ "$inputfiles" = "--" ]; then
      $ECHO "$name: done files ( StandardInput ) spooled to $outstream."
   else
      $ECHO "$name: done files ($processedfiles ) spooled to $outstream."
   fi
fi
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads