1#! @SCRIPT_SH@
2#	$Id$
3#
4# HylaFAX Facsimile Software
5#
6# Copyright (c) 1990-1996 Sam Leffler
7# Copyright (c) 1991-1996 Silicon Graphics, Inc.
8# HylaFAX is a trademark of Silicon Graphics
9#
10# Permission to use, copy, modify, distribute, and sell this software and
11# its documentation for any purpose is hereby granted without fee, provided
12# that (i) the above copyright notices and this permission notice appear in
13# all copies of the software and related documentation, and (ii) the names of
14# Sam Leffler and Silicon Graphics may not be used in any advertising or
15# publicity relating to the software without the specific, prior written
16# permission of Sam Leffler and Silicon Graphics.
17#
18# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
19# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
20# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
21#
22# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
23# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
24# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
25# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
26# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
27# OF THIS SOFTWARE.
28#
29
30#
31# Convert PostScript to facsimile using Ghostscript.
32#
33# ps2fax [-o output] [-l pagelength] [-w pagewidth]
34#	[-r resolution] [-m maxpages] [-*] [file ...]
35#
36# We need to process the arguments to extract the input
37# files so that we can prepend a prologue file that sets
38# up a non-interactive environment.
39#
40# NB: this shell script is assumed to be run from the
41#     top of the spooling hierarchy -- s.t. the etc directory
42#     is present.
43#
44
45test -f etc/setup.cache || {
46    SPOOL=`pwd`
47    cat<<EOF
48
49FATAL ERROR: $SPOOL/etc/setup.cache is missing!
50
51The file $SPOOL/etc/setup.cache is not present.  This
52probably means the machine has not been setup using the faxsetup(@MANNUM1_8@)
53command.  Read the documentation on setting up HylaFAX before you
54startup a server system.
55
56EOF
57    exit 1
58}
59. etc/setup.cache
60
61PS=$GSRIP
62
63fil=
64out=ps.fax		# default output filename
65pagewidth=1728		# standard fax width
66pagelength=297		# default to A4
67vres=98			# default to low res
68device=tiffg3		# default to 1D
69unlimitedlength=no	# default to fixed length-pages
70while test $# != 0
71do
72    case "$1" in
73    -o)	shift; out="$1" ;;
74    -w) shift; pagewidth="$1" ;;
75    -l) shift; pagelength="$1" ;;
76    -r)	shift; vres="$1" ;;
77    -m) shift;;				# NB: not implemented
78    -U) unlimitedlength=yes ;;
79    -1) device=tiffg3 ;;
80    -2) ($PS -h | grep tiffg32d >/dev/null 2>&1) \
81	    && { device=tiffg32d; } \
82	    || { device=tiffg3; }
83	;;
84    -3) ($PS -h | grep tiffg4 >/dev/null 2>&1) \
85	    && { device=tiffg4; } \
86	    || { device=tiffg3; }
87	;;
88    -*)	;;
89    *)	fil="$fil $1" ;;
90    esac
91    shift
92done
93test -z "$fil" && fil="-"		# read from stdin
94case "${pagewidth}x${pagelength}" in
951728x280|1728x279|2592x280|2592x279|3456x280|3456x279)	# 279.4mm is actually correct...
96    paper=letter;;
971728x364|2592x364|3456x364)
98    paper=legal;;
99*x296|*x297)			# more roundoff problems...
100    paper=a4;;
101*x364)
102    paper=b4;;
1032432x*|3648x*|4864x*)
104    paper=a3;;
105*)
106    echo "$0: Unsupported page size: $pagewidth x $pagelength";
107    exit 254;;			# causes document to be rejected
108esac
109#
110# The image must end up with a pixel width according to T.32 Table 21.
111# Ghostscript contains code to fixate a4 and letter to 1728 pixels
112# when using 196-204 dpi and tiffg3/4, it supposedly does the same for
113# B4 but not for A3, thus the floats are needed (for A3's benefit).
114#
115# See ghostscript/doc/Devices.htm under -dAdjustWidth=1 (default).
116# Use -dAdjustWidth=0 to disable.  With the right patch,
117# http://bugs.ghostscript.com/show_bug.cgi?id=688064
118# AdjustWidth can be made to specify the pagewidth directly and
119# replace -dFIXEDMEDIA to permit TIFFs to be produced with
120# varied lengths.
121#
122case "$paper" in
123    a4)
124	case "$pagewidth" in
125	    2592) hres=313.65;;		# VR_300X300
126	    3456) hres=418.20;; 	# VR_R16
127	    *) hres=209.10;;		# everything else, 1728 pixels
128	esac;;
129    b4)
130	case "$pagewidth" in
131	    3072) hres=311.97;;		# VR_300X300
132	    4096) hres=415.95;; 	# VR_R16
133	    *) hres=207.98;;		# everything else, 2048 pixels
134	esac;;
135    a3)
136	case "$pagewidth" in
137	    3648) hres=311.94;;		# VR_300X300
138	    4864) hres=415.93;; 	# VR_R16
139	    *) hres=207.96;;		# everything else, 2432 pixels
140	esac;;
141    *)					# letter, legal
142	case "$pagewidth" in
143	    2592) hres=304.94;;		# VR_300X300
144	    3456) hres=406.59;; 	# VR_R16
145	    *) hres=203.29;;		# everything else, 1728 pixels
146	esac;;
147esac
148
149#
150# The sed work fixes bug in Windows-generated
151# PostScript that causes certain international
152# character marks to be placed incorrectly.
153#
154#    | $SED -e 's/yAscent Ascent def/yAscent 0 def/g' \
155#
156# NB: unfortunately it appears to break valid PostScript;
157#     so it's been disabled.
158
159#
160# Suggestion from "Alan Sparks" <asparks@nss.harris.com>,
161# Add the -DFIXEDMEDIA argument to the last command in ps2fax.
162# This prevents page sizing within the documents from altering
163# the command-line page size specification.  This prevents
164# TIFFs to be made with pages of varied lengths, however.
165# See the comments on AdjustWidth above.
166#
167FIXEDWIDTH="-dFIXEDMEDIA"
168STRIPSIZE="-dMaxStripSize=0"
169
170#
171# Apply customizations such as watermarking.
172#
173if [ -f etc/FaxModify ]; then
174    . etc/FaxModify
175fi
176
177$CAT $fil | $PS -q \
178    -sDEVICE=$device \
179    -dNOPAUSE \
180    -dSAFER=true \
181    -sPAPERSIZE=$paper \
182    $FIXEDWIDTH \
183    $STRIPSIZE \
184    -r$hres\x$vres \
185    "-sOutputFile=$out" \
186    -
187