Re: pcl2fax: setting of 'PCLFONTSOURCE'
Aidan Van Dyk <[email protected]> Wed, 11 Sep 2013 09:11:01 -0400
| Newsgroups | gmane.comp.telephony.fax.hylafax.devel |
|---|---|
| Message-ID | <CAC_2qU_9rqPnnvfRP42EHLXRGMDfNs3V=iQoUncbyFtBD7Wckg@mail.gmail.com> |
--047d7b3a914c5eaae504e61b5ab3
Content-Type: text/plain; charset=UTF-8
If all you need is to change : to ; for PCLFONTSOURCE if it's set form
FONTPATH, does this work for you?
PCLFONTSOURCE=${FONTPATH//:/;}
On Wed, Sep 11, 2013 at 8:06 AM, Bram <[email protected]> wrote:
> Hi,
>
> [I'm cross-posting this to both '[email protected]' and '
> hylafax-devel@lists.**sourceforge.net<[email protected]>'
> since I'm unsure how they related to each other - apologies if this is not
> appropriate]
>
>
> There exists a problem with the setting of the 'PCLFONTSOURCE' variable in
> the 'pcl2fax' script.
> This script sets 'PCLFONTSOURCE' to the value of 'FONTPATH' as set in the
> 'setup.cache' file.
>
> Code from 'pcl2fax':
> if [ ! "$PCLFONTSOURCE" -a -n "$FONTPATH" ] ; then
> PCLFONTSOURCE=$FONTPATH
> fi
> if [ -n "$PCLFONTSOURCE" ] ; then
> export PCLFONTSOURCE
> fi
>
> It then runs the '$PCL6CMD'.
>
> The problem however is that FONTPATH appears to be separated by ':' while
> pcl6 *seems to* expect the 'PCLFONTSOURCE' to be separated by ';' [note:
> this is determined by looking at the source of pcl6].
> This causes an error when multiple paths are set in FONTPATH: it fails to
> find fonts.
>
> The easiest way to see this is by using strace:
>
> Separated by using ':'
> $ export PCLFONTSOURCE='/tmp/aa/:/tmp/**bb/:/tmp/cc/:/tmp/dd/' ;
> strace -f /usr/bin/pcl6 -sOutputFile="output" input 2>&1 | grep
> '/tmp/[abcd]'
> openat(AT_FDCWD, "/tmp/aa/:/tmp/bb/:/tmp/cc/:/**tmp/dd",
> O_RDONLY|O_NONBLOCK|O_**LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = -1 ENOENT
> (No such file or directory)
> openat(AT_FDCWD, "/tmp/aa/:/tmp/bb/:/tmp/cc/:/**tmp/dd",
> O_RDONLY|O_NONBLOCK|O_**LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = -1 ENOENT
> (No such file or directory)
>
> Separated by using ';'
> export PCLFONTSOURCE='/tmp/aa/;/tmp/**bb/;/tmp/cc/;/tmp/dd/' ;
> strace -f /usr/bin/pcl6 -sOutputFile="output" input 2>&1 | grep
> '/tmp/[abcd]'
> openat(AT_FDCWD, "/tmp/aa", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 3
> openat(AT_FDCWD, "/tmp/bb", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 3
> openat(AT_FDCWD, "/tmp/cc", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 3
> openat(AT_FDCWD, "/tmp/dd", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 3
> openat(AT_FDCWD, "/tmp/aa", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 4
> openat(AT_FDCWD, "/tmp/bb", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 4
> openat(AT_FDCWD, "/tmp/cc", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 4
> openat(AT_FDCWD, "/tmp/dd", O_RDONLY|O_NONBLOCK|O_**
> LARGEFILE|O_DIRECTORY|O_**CLOEXEC) = 4
>
>
> I'm not entirely sure how many ways there exists in the 'faxsetup' script
> to set the 'FONTPATH' variable.
> One method at least - and the method that appears to be used in our case -
> is the 'getGSFonts()' function:
> getGSFonts()
> {
> $PATH_GSRIP -h 2>/dev/null | $AWK -F '[ ]' '
> BEGIN { start = 0; }
> /Search path:/ { start = 1 }
> {
> if (start == 1) {
> if ($1 == "") {
> gsub(" ","")
> gsub("^[.]","")
> gsub("^:","")
> printf "%s", $0
> } else if ($1 != "Search") start =
> 0
> }
> }
> '
> }
>
> PATH_GSRIP is set to /usr/bin/gs.
> Running the command:
> $ /usr/bin/gs -h
> GNU Ghostscript 7.07 (2003-05-17)
> ...
> Search path:
> /usr/share/ghostscript/7.07/**lib :
> /usr/share/ghostscript/fonts :
> /usr/share/ghostpcl/fonts
>
>
> (Note: this is an older version of gs but I don't think the output changed)
>
>
> Looking at the source of ghostpcl/ghostpdl shows that it at one point did
> use ':' to separate paths.
>
> http://git.ghostscript.com/?p=**ghostpdl.git;a=commit;f=pl/**pjparse.c;h=*
> *64a01c3a07371098ac4eecab0df660**81f638b0a4<http://git.ghostscript.com/?p=ghostpdl.git;a=commit;f=pl/pjparse.c;h=64a01c3a07371098ac4eecab0df66081f638b0a4>
> author Henry Stiles <[email protected]>
> Sun, 3 Sep 2000 20:42:24 +0200 (18:42 +0000)
> committer Henry Stiles <[email protected]>
> Sun, 3 Sep 2000 20:42:24 +0200 (18:42 +0000)
> commit 64a01c3a07371098ac4eecab0df660**81f638b0a4
>
> Change to use `;' instead of ':' as a separator for the font path.
>
> git-svn-id: http://svn.ghostscript.com/**
> ghostpcl/trunk/ghostpcl@1189<http://svn.ghostscript.com/ghostpcl/trunk/ghostpcl@1189>06663e23-700e-0410-b217-
> **a244a6096597
>
>
> Best regards,
>
> Bram
>
>
> ------------------------------**------------------------------**----
> This message was sent using IMP, the Internet Messaging Program.
>
>
> ____________________ HylaFAX(tm) Developers Mailing List
> ____________________
> To subscribe/unsubscribe, click http://lists.hylafax.org/cgi-**
> bin/lsg2.cgi <http://lists.hylafax.org/cgi-bin/lsg2.cgi>
> On UNIX: mail -s unsubscribe hylafax-devel-request@hylafax.**org<[email protected]>< /dev/null
>
>
--
Aidan Van Dyk Create like a god,
[email protected] command like a king,
http://www.highrise.ca/ work like a
slave.
--047d7b3a914c5eaae504e61b5ab3
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">If all you need is to change : to ; for PCLFONTSOURCE if i=
t's set form FONTPATH, does this work for you?<div><br></div><div>PCLFO=
NTSOURCE=3D${FONTPATH//:/;}<br></div></div><div class=3D"gmail_extra"><br><=
br>
<div class=3D"gmail_quote">On Wed, Sep 11, 2013 at 8:06 AM, Bram <span dir=
=3D"ltr"><<a href=3D"mailto:[email protected]" target=3D"_blan=
k">[email protected]</a>></span> wrote:<br><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex">
Hi,<br>
<br>
[I'm cross-posting this to both '<a href=3D"mailto:hylafax-devel@hy=
lafax.org" target=3D"_blank">[email protected]</a>' and '<a=
href=3D"mailto:[email protected]" target=3D"_blank">hyla=
fax-devel@lists.<u></u>sourceforge.net</a>' since I'm unsure how th=
ey related to each other - apologies if this is not appropriate]<br>
<br>
<br>
There exists a problem with the setting of the 'PCLFONTSOURCE' vari=
able in the 'pcl2fax' script.<br>
This script sets 'PCLFONTSOURCE' to the value of 'FONTPATH'=
as set in the 'setup.cache' file.<br>
<br>
Code from 'pcl2fax':<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if [ ! "$PCLFONTSOURCE" -a -n "$=
FONTPATH" ] ; then<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 PCLFONTSOURCE=3D$FONTPATH<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 fi<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if [ -n "$PCLFONTSOURCE" ] ; then<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 export PCLFONTSOURCE<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 fi<br>
<br>
It then runs the '$PCL6CMD'.<br>
<br>
The problem however is that FONTPATH appears to be separated by ':'=
while pcl6 *seems to* expect the 'PCLFONTSOURCE' to be separated b=
y ';' [note: this is determined by looking at the source of pcl6].<=
br>
This causes an error when multiple paths are set in FONTPATH: it fails to f=
ind fonts.<br>
<br>
The easiest way to see this is by using strace:<br>
<br>
Separated by using ':'<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 $ export PCLFONTSOURCE=3D'/tmp/aa/:/tmp/<u>=
</u>bb/:/tmp/cc/:/tmp/dd/' ; =C2=A0 strace -f /usr/bin/pcl6 =C2=A0-sOut=
putFile=3D"output" input 2>&1 | grep '/tmp/[abcd]'=
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/aa/:/tmp/bb/:/tmp/c=
c/:/<u></u>tmp/dd", O_RDONLY|O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY=
|O_<u></u>CLOEXEC) =3D -1 ENOENT (No such file or directory)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/aa/:/tmp/bb/:/tmp/c=
c/:/<u></u>tmp/dd", O_RDONLY|O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY=
|O_<u></u>CLOEXEC) =3D -1 ENOENT (No such file or directory)<br>
<br>
Separated by using ';'<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 export PCLFONTSOURCE=3D'/tmp/aa/;/tmp/<u></=
u>bb/;/tmp/cc/;/tmp/dd/' ; =C2=A0 strace -f /usr/bin/pcl6 =C2=A0-sOutpu=
tFile=3D"output" input 2>&1 | grep '/tmp/[abcd]'<b=
r>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/aa", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 3<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/bb", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 3<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/cc", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 3<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/dd", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 3<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/aa", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 4<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/bb", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 4<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/cc", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 4<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 openat(AT_FDCWD, "/tmp/dd", O_RDONLY|=
O_NONBLOCK|O_<u></u>LARGEFILE|O_DIRECTORY|O_<u></u>CLOEXEC) =3D 4<br>
<br>
<br>
I'm not entirely sure how many ways there exists in the 'faxsetup&#=
39; script to set the 'FONTPATH' variable.<br>
One method at least - and the method that appears to be used in our case - =
is the 'getGSFonts()' function:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 getGSFonts()<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 {<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 $PATH_GSRIP -h 2>=
;/dev/null | $AWK -F '[ ]' '<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 BEGIN { start =3D 0; }<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 /Search path:/ { start =3D 1 }<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 {<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (start =3D=3D 1) {<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 if ($1 =3D=3D "") {<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 gsub(" ","")<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 gsub("^[.]","")<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 gsub("^:","")<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 printf "%s", $0<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } else i=
f ($1 !=3D "Search") start =3D 0<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 }<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 '<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
<br>
PATH_GSRIP is set to /usr/bin/gs.<br>
Running the command:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 $ /usr/bin/gs -h<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 GNU Ghostscript 7.07 (2003-05-17)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ...<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Search path:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/usr/share/ghostscript/7.07/<u></u=
>lib : /usr/share/ghostscript/fonts :<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/usr/share/ghostpcl/fonts<br>
<br>
<br>
(Note: this is an older version of gs but I don't think the output chan=
ged)<br>
<br>
<br>
Looking at the source of ghostpcl/ghostpdl shows that it at one point did u=
se ':' to separate paths.<br>
<br>
<a href=3D"http://git.ghostscript.com/?p=3Dghostpdl.git;a=3Dcommit;f=3Dpl/p=
jparse.c;h=3D64a01c3a07371098ac4eecab0df66081f638b0a4" target=3D"_blank">ht=
tp://git.ghostscript.com/?p=3D<u></u>ghostpdl.git;a=3Dcommit;f=3Dpl/<u></u>=
pjparse.c;h=3D<u></u>64a01c3a07371098ac4eecab0df660<u></u>81f638b0a4</a><br=
>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 author =C2=A0Henry Stiles <<a href=3D"mailto=
:[email protected]" target=3D"_blank">[email protected]</a>&g=
t;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Sun, 3 Sep 2000 20:=
42:24 +0200 (18:42 +0000)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 committer =C2=A0 =C2=A0 =C2=A0 Henry Stiles <=
;<a href=3D"mailto:[email protected]" target=3D"_blank">henry.stiles=
@artifex.com</a>><br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Sun, 3 Sep 2000 20:=
42:24 +0200 (18:42 +0000)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 commit =C2=A064a01c3a07371098ac4eecab0df660<u><=
/u>81f638b0a4<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Change to use `;' instead of ':' as=
a separator for the font path.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 git-svn-id: <a href=3D"http://svn.ghostscript.c=
om/ghostpcl/trunk/ghostpcl@1189" target=3D"_blank">http://svn.ghostscript.c=
om/<u></u>ghostpcl/trunk/ghostpcl@1189</a> 06663e23-700e-0410-b217-<u></u>a=
244a6096597<br>
<br>
<br>
Best regards,<br>
<br>
Bram<br>
<br>
<br>
------------------------------<u></u>------------------------------<u></u>-=
---<br>
This message was sent using IMP, the Internet Messaging Program.<br>
<br>
<br>
____________________ HylaFAX(tm) Developers Mailing List __________________=
__<br>
=C2=A0To subscribe/unsubscribe, click <a href=3D"http://lists.hylafax.org/c=
gi-bin/lsg2.cgi" target=3D"_blank">http://lists.hylafax.org/cgi-<u></u>bin/=
lsg2.cgi</a><br>
On UNIX: mail -s unsubscribe <a href=3D"mailto:hylafax-devel-request@hylafa=
x.org" target=3D"_blank">hylafax-devel-request@hylafax.<u></u>org</a> < =
/dev/null<br>
<br>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Aidan Van Dy=
k =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 Create like a god,<br><a href=3D"mailto:[email protected]" target=3D=
"_blank">[email protected]</a> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 command like a king,<br>
<a href=3D"http://www.highrise.ca/" target=3D"_blank">http://www.highrise.c=
a/</a> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 work like a slave.
</div>
--047d7b3a914c5eaae504e61b5ab3--
____________________ HylaFAX(tm) Developers Mailing List ____________________
To subscribe/unsubscribe, click http://lists.hylafax.org/cgi-bin/lsg2.cgi
On UNIX: mail -s unsubscribe [email protected] < /dev/null