xref: /plan9-contrib/rc/bin/fax (revision 651ff87a0a0495ebcb861c70ae633c18d66b574a)
1219b2ee8SDavid du Colombier#!/bin/rc
2*651ff87aSDavid du Colombier# fax [-v] telephone-number recipient [file ...] - send files via fax
3*651ff87aSDavid du Colombierrfork e
4219b2ee8SDavid du Colombierview=no
5219b2ee8SDavid du Colombierstdin=no
6219b2ee8SDavid du Colombier
7*651ff87aSDavid du Colombierfn usage {
8*651ff87aSDavid du Colombier	echo 'usage: fax [-v] telephone-number recipient [file ...]' >[1=2]
9*651ff87aSDavid du Colombier	exit usage
10*651ff87aSDavid du Colombier}
11*651ff87aSDavid du Colombier
12219b2ee8SDavid du Colombierswitch($1){
13219b2ee8SDavid du Colombiercase -v
14219b2ee8SDavid du Colombier	view=yes
15219b2ee8SDavid du Colombier	shift
16219b2ee8SDavid du Colombier}
17219b2ee8SDavid du Colombier
18219b2ee8SDavid du Colombierswitch ($#*) {
19219b2ee8SDavid du Colombiercase 0 1
20*651ff87aSDavid du Colombier	usage
21219b2ee8SDavid du Colombiercase 2
22219b2ee8SDavid du Colombier	stdin=yes
23219b2ee8SDavid du Colombier}
249a747e4fSDavid du Colombiertelno=`{echo $1|sed 's/[ \-]//g'}
25219b2ee8SDavid du Colombiershift
26219b2ee8SDavid du Colombier
27*651ff87aSDavid du Colombierif (! ~ $telno [0-9]* +[0-9]*)
28*651ff87aSDavid du Colombier	usage
297dd7cddfSDavid du Colombier
30*651ff87aSDavid du Colombier# our old phone system needed *9 to get outside; the new one just needs 9
317dd7cddfSDavid du Colombierswitch($telno){
327dd7cddfSDavid du Colombiercase ???????
33*651ff87aSDavid du Colombier	telno='9,'^$telno
347dd7cddfSDavid du Colombiercase ??????????
35*651ff87aSDavid du Colombier	telno='9,1'^$telno
367dd7cddfSDavid du Colombiercase 1??????????
37*651ff87aSDavid du Colombier	telno='9,'^$telno
387dd7cddfSDavid du Colombiercase 011*
39*651ff87aSDavid du Colombier	telno='9,'^$telno
407dd7cddfSDavid du Colombiercase +*
41*651ff87aSDavid du Colombier	telno=`{echo $telno | sed 's/\+/9,011/'}
427dd7cddfSDavid du Colombier}
437dd7cddfSDavid du Colombier
44219b2ee8SDavid du Colombierrecip=$1
45219b2ee8SDavid du Colombiershift
46219b2ee8SDavid du Colombier
47219b2ee8SDavid du Colombierscript=/tmp/fax.$pid
48219b2ee8SDavid du Colombierheader=/tmp/faxh.$pid
49219b2ee8SDavid du Colombieruser=`{cat /dev/user}
50219b2ee8SDavid du Colombiertmp=/tmp/fax.g3.$pid
51219b2ee8SDavid du Colombiertmpin=/tmp/fax.in.$pid
52219b2ee8SDavid du Colombiertmpps=/tmp/fax.ps.$pid
53219b2ee8SDavid du Colombiertel=`{grep '\) '$user /lib/tel}
54219b2ee8SDavid du Colombiermyname=`{echo $tel | sed 's/ \(.*//'}
55*651ff87aSDavid du Colombierif (~ $#myname 0)
56*651ff87aSDavid du Colombier	myname=''
57219b2ee8SDavid du Colombierext=`{echo $tel | sed 's/.*\) [^ ]* [^ ]* ([^ ]*).*/\1/'}
58219b2ee8SDavid du Colombier
59*651ff87aSDavid du Colombierfn sigexit {
607dd7cddfSDavid du Colombier	rm -f $tmp.* $script $header $header.* $tmpin $tmpps
61*651ff87aSDavid du Colombier}
62*651ff87aSDavid du Colombierfn sigint {
63*651ff87aSDavid du Colombier	sigexit
64219b2ee8SDavid du Colombier	exit interrupt
65219b2ee8SDavid du Colombier}
66219b2ee8SDavid du Colombier
67219b2ee8SDavid du Colombier# gather input into a file
68219b2ee8SDavid du Colombierswitch($stdin){
69219b2ee8SDavid du Colombiercase yes
70219b2ee8SDavid du Colombier	cat >$tmpin
71219b2ee8SDavid du Colombier	infiles=$tmpin
72219b2ee8SDavid du Colombiercase *
73219b2ee8SDavid du Colombier	infiles=($*)
74219b2ee8SDavid du Colombier}
75219b2ee8SDavid du Colombier
76219b2ee8SDavid du Colombier# convert to g3
779a747e4fSDavid du Colombierg3files=()
789a747e4fSDavid du Colombiera=1
799a747e4fSDavid du Colombierfor(i in $infiles){
809a747e4fSDavid du Colombier	switch(`{file $i}){
819a747e4fSDavid du Colombier	case *:*g3* *:*fax*
829a747e4fSDavid du Colombier		g3files=($g3files $i)
839a747e4fSDavid du Colombier	case *:*postscript
84*651ff87aSDavid du Colombier		gs -dSAFER '-sDEVICE=dfaxlow' '-sOUTPUTFILE='$tmp'.'$#a'.%03d' \
85*651ff87aSDavid du Colombier			-dNOPAUSE -dQUIET $i quit.ps
869a747e4fSDavid du Colombier		g3files=($g3files $tmp.$#a.*)
87219b2ee8SDavid du Colombier	case *
889a747e4fSDavid du Colombier		lp -dstdout $i >$tmpps
89*651ff87aSDavid du Colombier		gs -dSAFER '-sDEVICE=dfaxlow' '-sOUTPUTFILE='$tmp'.'$#a'.%03d' \
90*651ff87aSDavid du Colombier			-dNOPAUSE -dQUIET $tmpps quit.ps
919a747e4fSDavid du Colombier		g3files=($g3files $tmp.$#a.*)
929a747e4fSDavid du Colombier	}
93*651ff87aSDavid du Colombier	a=($a 1)		# count by increasing list length
94219b2ee8SDavid du Colombier}
95219b2ee8SDavid du Colombier
96219b2ee8SDavid du Colombierpages=`{echo $g3files|wc -w}
97219b2ee8SDavid du Colombier
98*651ff87aSDavid du Colombier# use delimiters that are unlikely to be supplied in arguments
99*651ff87aSDavid du Colombier{
100*651ff87aSDavid du Colombier	echo -n sFAXddd101*651ff87aSDavid du Colombier	echo -n `{date}		# treat `{} output list specially
102*651ff87aSDavid du Colombier	echo103*651ff87aSDavid du Colombier	echo sFAXFFF$"myname^∮
104*651ff87aSDavid du Colombier	echo s∮FAXEEE∮$"user^∮
105*651ff87aSDavid du Colombier	echo sFAXVVV$"ext^∮
106*651ff87aSDavid du Colombier	echo s∮FAXTTT∮$"recip^∮
107*651ff87aSDavid du Colombier	echo sFAXfff$"telno^∮
108*651ff87aSDavid du Colombier	echo s∮FAXPPP∮$"pages^∮
109*651ff87aSDavid du Colombier} >>$script
110219b2ee8SDavid du Colombiersed -f $script /sys/lib/fax/h.ps >$header
111219b2ee8SDavid du Colombier
112*651ff87aSDavid du Colombiergs -dSAFER '-sDEVICE=dfaxlow' '-sOUTPUTFILE='$header'.%03d' \
113*651ff87aSDavid du Colombier	-dNOPAUSE -dQUIET $header quit.ps
114219b2ee8SDavid du Colombier
115219b2ee8SDavid du Colombierfiles=()
116219b2ee8SDavid du Colombierfor(i in $header.* $g3files){
117219b2ee8SDavid du Colombier	files=($files -f $i)
118219b2ee8SDavid du Colombier}
119219b2ee8SDavid du Colombier
120219b2ee8SDavid du Colombierswitch($view){
121219b2ee8SDavid du Colombiercase yes
122219b2ee8SDavid du Colombier	page $header.* $g3files
123*651ff87aSDavid du Colombiercase *
124*651ff87aSDavid du Colombier	upas/qer $files /mail/faxoutqueue fax $user $telno	</dev/null
125*651ff87aSDavid du Colombier	rx fax /sys/lib/fax/faxgoose				</dev/null
126219b2ee8SDavid du Colombier}
127