Applied Daryl Thachuk <daryl@montagetech.com>'s patch, as tuned by Lee.
#define FAX_FAXRCVDCMD FAX_BINDIR "/faxrcvd" /* cmd to process a recvd fax */
#define FAX_POLLRCVDCMD FAX_BINDIR "/pollrcvd" /* cmd to process a recvd fax */
#define FAX_PS2FAXCMD FAX_BINDIR "/ps2fax" /* cmd to convert postscript */
+#define FAX_PDF2FAXCMD FAX_BINDIR "/pdf2fax" /* cmd to convert PDF */
#define FAX_PCL2FAXCMD FAX_BINDIR "/pcl2fax" /* cmd to convert PCL */
#define FAX_TIFF2FAXCMD FAX_BINDIR "/tiff2fax" /* cmd to convert TIFF */
#define FAX_COVERCMD FAX_BINDIR "/mkcover" /* cmd to make cont coverpage */
util/ps2fax.dps.sh \
util/ps2fax.gs.sh \
util/ps2fax.imp.sh \
+ util/pdf2fax.gs.sh \
util/recvstats.sh.in \
util/tiff2fax.sh \
util/wedged.sh \
man/pagesizes.4f \
man/pollrcvd.1m \
man/ps2fax.1m \
+ man/pdf2fax.1m \
man/recvq.4f \
man/recvstats.1m \
man/sendfax.1 \
$RM bin/ps2fax
if [ -n "$LN_S" ]; then
$LN $LN_S ps2fax.$PS bin/ps2fax;
+ if [ $PS = gs ]; then
+ Note ""
+ Note "Make $DIR_SPOOL/bin/pdf2fax a link to $DIR_SPOOL/bin/pdf2fax.$PS."
+ Note ""
+ $LN $LN_S pdf2fax.$PS bin/pdf2fax;
+ else
+ Note ""
+ Note "Server-side PDF conversion is not supported on this system."
+ Note ""
+ fi
else
$LN bin/ps2fax.$PS bin/ps2fax;
+ if [ $PS = gs ]; then
+ Note ""
+ Note "Make $DIR_SPOOL/bin/pdf2fax a link to $DIR_SPOOL/bin/pdf2fax.$PS."
+ Note ""
+ $LN bin/pdf2fax.$PS bin/pdf2fax;
+ else
+ Note ""
+ Note "Server-side PDF conversion is not supported on this system."
+ Note ""
+ fi
fi
fi
{ "desiredtl", &FaxRequest::desiredtl },
{ "useccover", &FaxRequest::useccover },
};
-const char* FaxRequest::opNames[16] = {
+const char* FaxRequest::opNames[18] = {
"fax",
"tiff",
"!tiff",
+ "pdf",
+ "!pdf",
"postscript",
"!postscript",
"pcl",
case H_POLL: addRequest(send_poll, tag); break;
case H_FAX: addRequest(send_fax, tag); break;
+ case H_PDF:
+ if (cmd[0] == '!')
+ addRequest(send_pdf_saved, tag);
+ else
+ addRequest(send_pdf, tag, rejectJob);
+ break;
case H_TIFF:
if (cmd[0] == '!')
addRequest(send_tiff_saved, tag);
*cp++ = '\0';
else
cp = tag, tag = "";
- if (!checkDocument(cp))
+ if (!checkDocument(cp)) {
+ error("Document has been rejected");
rejectJob = true;
+ }
else
requests.append(faxRequest(op, dirnum, tag, cp));
}
send_fax = 0, // send prepared file via fax
send_tiff = 1, // send tiff file via fax
send_tiff_saved = 2, // saved tiff file (converted)
- send_postscript = 3, // send postscript file via fax
- send_postscript_saved = 4, // saved postscript file (converted)
- send_pcl = 5, // send PCL file via fax
- send_pcl_saved = 6, // saved PCL file (converted to tiff)
- send_data = 7, // send untyped data file
- send_data_saved = 8, // send untyped data file (converted)
- send_poll = 9, // make fax poll request
- send_page = 10, // send pager message (converted)
- send_page_saved = 11, // send pager message
- send_uucp = 12, // send file via uucp
- send_unknown = 13
+ send_pdf = 3, // send PDF file via fax
+ send_pdf_saved = 4, // saved PDF file (converted)
+ send_postscript = 5, // send postscript file via fax
+ send_postscript_saved = 6, // saved postscript file (converted)
+ send_pcl = 7, // send PCL file via fax
+ send_pcl_saved = 8, // saved PCL file (converted to tiff)
+ send_data = 9, // send untyped data file
+ send_data_saved = 10, // send untyped data file (converted)
+ send_poll = 11, // make fax poll request
+ send_page = 12, // send pager message (converted)
+ send_page_saved = 13, // send pager message
+ send_uucp = 14, // send file via uucp
+ send_unknown= 15
+
};
enum { // notification flags
no_notice = 0x0, // no notifications
static const stringval strvals[];
static const shortval shortvals[];
- static const char* opNames[16];
+ static const char* opNames[18];
static const char* notifyVals[4];
static const char* chopVals[4];
for (u_int i = 0, n = req.requests.length(); i < n; i++) {
const faxRequest& freq = req.requests[i];
switch (freq.op) {
+ case FaxRequest::send_pdf:
+ case FaxRequest::send_pdf_saved:
case FaxRequest::send_tiff:
case FaxRequest::send_tiff_saved:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript: // convert PostScript
case FaxRequest::send_pcl: // convert PCL
case FaxRequest::send_tiff: // verify&possibly convert TIFF
+ case FaxRequest::send_pdf: // convert PDF
return (true);
case FaxRequest::send_poll: // verify modem is capable
if (!job.modem->supportsPolling()) {
case FaxRequest::send_postscript: // convert PostScript
case FaxRequest::send_pcl: // convert PCL
case FaxRequest::send_tiff: // verify&possibly convert TIFF
+ case FaxRequest::send_pdf: // convert PDF
tmp = FaxRequest::mkbasedoc(freq.item) | ";" | params.encodePage();
status = convertDocument(job, freq, tmp, params, dci, req.notice);
if (status == Job::done) {
int ac = 0;
switch (req.op) {
case FaxRequest::send_postscript: argv[ac++] = ps2faxCmd; break;
+ case FaxRequest::send_pdf: argv[ac++] = pdf2faxCmd; break;
case FaxRequest::send_pcl: argv[ac++] = pcl2faxCmd; break;
case FaxRequest::send_tiff: argv[ac++] = tiff2faxCmd; break;
}
break;
case FaxRequest::send_tiff:
case FaxRequest::send_tiff_saved:
+ case FaxRequest::send_pdf:
+ case FaxRequest::send_pdf_saved:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript_saved:
case FaxRequest::send_pcl:
{ "contcovercmd", &faxQueueApp::coverCmd, FAX_COVERCMD },
{ "notifycmd", &faxQueueApp::notifyCmd, FAX_NOTIFYCMD },
{ "ps2faxcmd", &faxQueueApp::ps2faxCmd, FAX_PS2FAXCMD },
+{ "pdf2faxcmd", &faxQueueApp::pdf2faxCmd, FAX_PDF2FAXCMD },
{ "pcl2faxcmd", &faxQueueApp::pcl2faxCmd, FAX_PCL2FAXCMD },
{ "tiff2faxcmd", &faxQueueApp::tiff2faxCmd, FAX_TIFF2FAXCMD },
{ "sendfaxcmd", &faxQueueApp::sendFaxCmd,
float pageChopThreshold; // minimum space before page chop
fxStr notifyCmd; // external command for notification
fxStr ps2faxCmd; // external command for ps imager
+ fxStr pdf2faxCmd; // external command for pdf imager
fxStr pcl2faxCmd; // external command for pcl imager
fxStr tiff2faxCmd; // external command for TIFF converter
fxStr coverCmd; // external command for cont cover pages
hash("retrytime");
hash("poll");
hash("tiff");
+ hash("pdf");
+ hash("!pdf");
hash("!tiff");
hash("postscript");
hash("!postscript");
int cc = Sys::read(fd, (char*) &b, sizeof (b));
if (cc > 2 && b.buf[0] == '%' && b.buf[1] == '!')
op = FaxRequest::send_postscript;
+ else if (cc > 2 && b.buf[0] == '%' && b.buf[1] == 'P') {
+ logError("What we have here is a PDF file");
+ op = FaxRequest::send_pdf;
+ }
else if (cc > sizeof (b.h) && isTIFF(b.h))
op = FaxRequest::send_tiff;
else
}
Sys::close(fd);
}
+ if (op == FaxRequest::send_unknown)
+ logError("Don't know what file");
+
return (op != FaxRequest::send_unknown);
}
"PAGE", // send_page_saved
"UUCP", // send_uucp
"UNKNOWN", // send_unknown
+ "PDF", // send_pdf
+ "PDF", // send_pdf_saved
};
static const char*
const faxRequest& freq = job.requests[i];
// XXX should cover page docs not be shown?
switch (freq.op) {
+ case FaxRequest::send_pdf:
+ case FaxRequest::send_pdf_saved:
case FaxRequest::send_tiff:
case FaxRequest::send_tiff_saved:
case FaxRequest::send_postscript:
switch (freq.op) {
case FaxRequest::send_tiff:
case FaxRequest::send_tiff_saved:
+ case FaxRequest::send_pdf:
+ case FaxRequest::send_pdf_saved:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript_saved:
case FaxRequest::send_pcl:
break;
case FaxRequest::send_tiff:
case FaxRequest::send_tiff_saved:
+ case FaxRequest::send_pdf:
+ case FaxRequest::send_pdf_saved:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript_saved:
case FaxRequest::send_pcl:
/* ... fall thru */
case FaxRequest::send_tiff_saved:
case FaxRequest::send_tiff:
+ case FaxRequest::send_pdf_saved:
+ case FaxRequest::send_pdf:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript_saved:
case FaxRequest::send_pcl:
switch (freq.op) {
case FaxRequest::send_tiff_saved:
case FaxRequest::send_tiff:
+ case FaxRequest::send_pdf_saved:
+ case FaxRequest::send_pdf:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript_saved:
case FaxRequest::send_pcl:
switch (freq.op) {
case FaxRequest::send_tiff:
case FaxRequest::send_tiff_saved:
+ case FaxRequest::send_pdf:
+ case FaxRequest::send_pdf_saved:
case FaxRequest::send_postscript:
case FaxRequest::send_postscript_saved:
case FaxRequest::send_pcl:
const faxRequest& freq = reqs[--i];
switch (freq.op) {
case FaxRequest::send_tiff:
+ case FaxRequest::send_pdf:
case FaxRequest::send_postscript:
case FaxRequest::send_pcl:
Sys::unlink(freq.item);
, seqnum
, type == FaxRequest::send_tiff ? ".tif" :
type == FaxRequest::send_postscript ? ".ps" :
+ type == FaxRequest::send_pdf ? ".pdf":
""
);
dfd = Sys::open(templ, O_RDWR|O_CREAT|O_EXCL, 0660);
sman.apps/pagesend.1m \
sman.apps/pollrcvd.1m \
sman.apps/ps2fax.1m \
+ sman.apps/pdf2fax.1m \
sman.apps/recvstats.1m \
sman.apps/tagtest.1m \
sman.apps/tiff2fax.1m \
sman.apps/pagesend.1m:: ${SRCDIR}/pagesend.1m; ${MANCVT}
sman.apps/pollrcvd.1m:: ${SRCDIR}/pollrcvd.1m; ${MANCVT}
sman.apps/ps2fax.1m:: ${SRCDIR}/ps2fax.1m; ${MANCVT}
+sman.apps/pdf2fax.1m:: ${SRCDIR}/pdf2fax.1m; ${MANCVT}
sman.apps/recvstats.1m:: ${SRCDIR}/recvstats.1m; ${MANCVT}
sman.apps/tagtest.1m:: ${SRCDIR}/tagtest.1m; ${MANCVT}
sman.apps/tiff2fax.1m:: ${SRCDIR}/tiff2fax.1m; ${MANCVT}
${PUTSUPD} -m 755 -src ${SRCDIR}/ps2fax.gs.sh -O ps2fax.gs
${PUTSUPD} -m 755 -src ${SRCDIR}/ps2fax.dps.sh -O ps2fax.dps
${PUTSUPD} -m 755 -src ${SRCDIR}/ps2fax.imp.sh -O ps2fax.imp
+ ${PUTSUPD} -m 755 -src ${SRCDIR}/pdf2fax.gs.sh -O pdf2fax.gs
${PUTSUPD} -m 755 -src ${SRCDIR}/pcl2fax.sh -O pcl2fax
${PUTSUPD} -m 755 -src ${SRCDIR}/tiff2fax.sh -O tiff2fax
${PUTSUPD} -m 755 -src ${SRCDIR}/notify.sh -O notify
return "PostScript";
else if (match(s, "\.tif"))
return "TIFF";
+ else if (match(s, "\.pdf"))
+ return "PDF";
else if (match(s, "\.pcl"))
return "PCL";
else