HylaFAX The world's
most advanced open source fax server
|
|
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
Patch to faxstat (with patch this time)
- To: flexfax@sgi.com
- Subject: flexfax: Patch to faxstat (with patch this time)
- From: Damian Ivereigh <damian@cisco.com>
- Date: Wed, 15 Jul 1998 16:33:59 +1000
This patch allows specification of the ModemFmt, JobFmt & RcvFmt in the
environment. This way the changes in the format string can be made on
the fly. It also adds two new option -m & -n, which turn off the server
& modem status reports and turn off the headers. This is all designed to
make it easier to parse the output.
As a side effect I also fixed a bug which stopped the ModemFmt from
working. I ended up having to create a new function in FaxClient.c++ to
update the server with new format strings if they have changed. This was
previous done as a side effect of printing the header.
You can install this patch from the hylafax source dir.
Any problems let me know.
Damian
--
______________________________________________________________________
* Damian Ivereigh * || || * Cisco Systems, Inc. *
* MIS Printer Admin * .||||. .||||. * 408-526-4413 *
* Linux Bigot * ..:||||||:..:||||||:.. * 800-800-1180 x64413 *
* damian@cisco.com * cisco Systems, Inc. * Fax: 408-527-2563 *
*______________________________________________________________________*Index: faxstat/faxstat.c++
===================================================================
RCS file: /usr/local/cvsroot/source/hylafax/faxstat/faxstat.c++,v
retrieving revision 1.1.1.1
retrieving revision 1.1.2.1
diff -c -r1.1.1.1 -r1.1.2.1
*** faxstat.c++ 1998/07/01 21:50:45 1.1.1.1
--- faxstat.c++ 1998/07/01 22:43:37 1.1.2.1
***************
*** 1,4 ****
! /* $Id: faxstat.c++,v 1.1.1.1 1998/07/01 21:50:45 damian Exp $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
--- 1,4 ----
! /* $Id: faxstat.c++,v 1.1.2.1 1998/07/01 22:43:37 damian Exp $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
***************
*** 57,68 ****
resetConfig();
readConfig(FAX_SYSCONF);
readConfig(FAX_USERCONF);
fxStrArray dirs;
- dirs.append(FAX_STATUSDIR); // server status
fxBool checkInfo = FALSE;
int c;
! while ((c = getopt(argc, argv, "h:adgfilrsv")) != -1)
switch (c) {
case 'a': // display archived jobs
dirs.append(FAX_ARCHDIR);
--- 57,70 ----
resetConfig();
readConfig(FAX_SYSCONF);
readConfig(FAX_USERCONF);
+ readConfigEnv();
fxStrArray dirs;
fxBool checkInfo = FALSE;
+ fxBool modemInfo = TRUE;
+ fxBool showHeader = TRUE;
int c;
! while ((c = getopt(argc, argv, "h:adgfilmnrsv")) != -1)
switch (c) {
case 'a': // display archived jobs
dirs.append(FAX_ARCHDIR);
***************
*** 85,90 ****
--- 87,98 ----
case 'l': // use local timezone for dates & times
setTimeZone(TZ_LOCAL);
break;
+ case 'm': // disable modem info line
+ modemInfo = FALSE;
+ break;
+ case 'n': // disable header line
+ showHeader = FALSE;
+ break;
case 'r': // display receive queue
dirs.append(FAX_RECVDIR);
break;
***************
*** 100,116 ****
fxStr emsg;
if (callServer(emsg)) {
if (login(NULL, emsg)) {
if (checkInfo)
(void) recvData(writeStdout, NULL, emsg, 0,
"RETR " FAX_STATUSDIR "/any." FAX_INFOSUF);
for (u_int i = 0, n = dirs.length(); i < n; i++) {
header = (i > 0 ? "\n" : "");
if (dirs[i] == FAX_SENDDIR || dirs[i] == FAX_DONEDIR) {
! getJobStatusHeader(header);
! header.append('\n');
} else if (dirs[i] == FAX_RECVDIR) {
! getRecvStatusHeader(header);
! header.append('\n');
}
if (!listWithHeader(dirs[i], emsg))
break;
--- 108,131 ----
fxStr emsg;
if (callServer(emsg)) {
if (login(NULL, emsg)) {
+ updPendingConfig();
+ if (modemInfo)
+ listWithHeader(FAX_STATUSDIR, emsg);
if (checkInfo)
(void) recvData(writeStdout, NULL, emsg, 0,
"RETR " FAX_STATUSDIR "/any." FAX_INFOSUF);
for (u_int i = 0, n = dirs.length(); i < n; i++) {
header = (i > 0 ? "\n" : "");
if (dirs[i] == FAX_SENDDIR || dirs[i] == FAX_DONEDIR) {
! if (showHeader) {
! getJobStatusHeader(header);
! header.append('\n');
! }
} else if (dirs[i] == FAX_RECVDIR) {
! if (showHeader) {
! getRecvStatusHeader(header);
! header.append('\n');
! }
}
if (!listWithHeader(dirs[i], emsg))
break;
Index: util/FaxClient.c++
===================================================================
RCS file: /usr/local/cvsroot/source/hylafax/util/FaxClient.c++,v
retrieving revision 1.1.1.1
retrieving revision 1.1.2.1
diff -c -r1.1.1.1 -r1.1.2.1
*** FaxClient.c++ 1998/07/01 21:50:43 1.1.1.1
--- FaxClient.c++ 1998/07/01 22:43:37 1.1.2.1
***************
*** 1,4 ****
! /* $Id: FaxClient.c++,v 1.1.1.1 1998/07/01 21:50:43 damian Exp $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
--- 1,4 ----
! /* $Id: FaxClient.c++,v 1.1.2.1 1998/07/01 22:43:37 damian Exp $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
***************
*** 300,305 ****
--- 300,343 ----
}
fxBool
+ FaxClient::readConfigEnv(void)
+ {
+ fxBool ret=TRUE;
+ const char* cp;
+
+ cp = getenv("FAXJOBFMT");
+ if (cp && *cp != '\0')
+ ret = ret && setJobStatusFormat(cp);
+
+ cp = getenv("FAXRCVFMT");
+ if (cp && *cp != '\0')
+ ret = ret && setRecvStatusFormat(cp);
+
+ cp = getenv("FAXMODEMFMT");
+ if (cp && *cp != '\0')
+ ret = ret && setModemStatusFormat(cp);
+
+ cp = getenv("FAXFILEFMT");
+ if (cp && *cp != '\0')
+ ret = ret && setFileStatusFormat(cp);
+
+ return (ret);
+ }
+
+ fxBool
+ FaxClient::updPendingConfig(void)
+ {
+ fxBool ret=TRUE;
+
+ ret = ret && setStatusFormatPending("JOBFMT", FS_JFMTPEND, jobFmt);
+ ret = ret && setStatusFormatPending("RCVFMT", FS_RFMTPEND, recvFmt);
+ ret = ret && setStatusFormatPending("MDMFMT", FS_MFMTPEND, modemFmt);
+ ret = ret && setStatusFormatPending("FILEFMT", FS_FFMTPEND, fileFmt);
+
+ return(ret);
+ }
+
+ fxBool
FaxClient::callServer(fxStr& emsg)
{
if (host.length() == 0) { // if host not specified by -h
***************
*** 1414,1419 ****
--- 1452,1479 ----
} else
state |= flag;
fmt = value;
+ return (TRUE);
+ }
+
+ /*
+ * Set the specified status format string
+ * in the client and the server if we have an update pending.
+ */
+ fxBool
+ FaxClient::setStatusFormatPending(const char* cmd, u_int flag,
+ fxStr& fmt)
+ {
+ if (state&flag) { // set pending; do it
+ if (isLoggedIn()) {
+ if (command("%s \"%s\"", cmd, (const char*) fmt) == COMPLETE) {
+ state &= ~flag;
+ }
+ else {
+ printError("%s", (const char*) lastResponse);
+ return (FALSE);
+ }
+ }
+ }
return (TRUE);
}
Index: util/FaxClient.h
===================================================================
RCS file: /usr/local/cvsroot/source/hylafax/util/FaxClient.h,v
retrieving revision 1.1.1.1
retrieving revision 1.1.2.1
diff -c -r1.1.1.1 -r1.1.2.1
*** FaxClient.h 1998/07/01 21:50:44 1.1.1.1
--- FaxClient.h 1998/07/01 22:43:37 1.1.2.1
***************
*** 1,4 ****
! /* $Id: FaxClient.h,v 1.1.1.1 1998/07/01 21:50:44 damian Exp $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
--- 1,4 ----
! /* $Id: FaxClient.h,v 1.1.2.1 1998/07/01 22:43:37 damian Exp $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
***************
*** 154,159 ****
--- 154,160 ----
const fxStr& getStatusFormat(u_int flag, const char* cmd, fxStr& fmt);
fxBool setStatusFormat(const char* cmd, u_int flag, fxStr&, const char*);
+ fxBool setStatusFormatPending(const char* cmd, u_int flag, fxStr& fmt);
void makeHeader(const char* fmt, const FaxFmtHeader fmts[], fxStr& header);
virtual fxBool setupUserIdentity(fxStr& emsg);
***************
*** 162,167 ****
--- 163,170 ----
virtual void resetConfig(void);
virtual void setupConfig(void);
+ virtual fxBool updPendingConfig(void);
+ virtual fxBool readConfigEnv(void);
virtual fxBool setConfigItem(const char* tag, const char* value);
virtual void configError(const char* fmt ...);
virtual void configTrace(const char* fmt ...);
Index: man/faxstat.1
===================================================================
RCS file: /usr/local/cvsroot/source/hylafax/man/faxstat.1,v
retrieving revision 1.1
diff -c -r1.1 faxstat.1
*** faxstat.1 1998/07/01 21:50:46 1.1
--- faxstat.1 1998/07/14 23:25:40
***************
*** 151,156 ****
--- 151,162 ----
.B \-l
Display times and dates in the local timezone of the server.
.TP 10
+ .B \-m
+ Disable display of modem and server status info.
+ .TP 10
+ .B \-n
+ Disable display of header lines (good for parsing by a script).
+ .TP 10
.B \-r
Display the receive queue status for each server.
The
***************
*** 176,206 ****
reads configuration information from the file
.B ${LIBDATA}/hyla.conf
and then from the file
! .BR ~/.hylarc .
Configuration files follow the conventions described in
.IR hylafax (1).
The following configuration parameters are recognized:
.sp .5
! .nf
! .ta \w'AutoCoverPage 'u +\w'boolean 'u +\w'\s-1\fIsee below\fP\s+1 'u
! \fBTag Type Default Description\fP
! FileFmt string \s-1\fIsee below\fP\s+1 format string for file status results
! Host string \s-1localhost\s+1 host to contact for service
! JobFmt string \s-1\fIsee below\fP\s+1 format string for job status results
! ModemFmt string \s-1\fIsee below\fP\s+1 format string for modem status results
! Port integer \s-14559\s+1 port to use in contacting server
! Protocol string \s-1tcp\s+1 protocol to use in contacting server
! RcvFmt string \s-1\fIsee below\fP\s+1 format string for received facsimile status results
! TimeZone string \s-1GMT\s+1 timezone to use for reporting dates and times
! Verbose boolean \s-1No\s+1 whether or not to enable protocol tracing
! .fi
.PP
The configuration parameters are explained below:
.TP 14
.B FileFmt
The format string to use when returning file status information with the
.B \-f
! option.
Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
--- 182,233 ----
reads configuration information from the file
.B ${LIBDATA}/hyla.conf
and then from the file
! .BR ~/.hylarc
! then finally in some cases environment variables (see below).
Configuration files follow the conventions described in
.IR hylafax (1).
The following configuration parameters are recognized:
.sp .5
! .ta \w'Tag 'u +\w'Env. Var. 'u +\w'Type 'u +\w'\s-1\fIsee below\fP\s+1 'u
! .TP 43
! \fBTag Env. Var. Type Default\fP
! \fBDescription\fP
! .TP 43
! FileFmt FAXFILEFMT string \s-1\fIsee below\fP\s+1
! format string for file status results
! .TP 43
! Host FAXSERVER string \s-1localhost\s+1
! host to contact for service
! .TP 43
! JobFmt FAXJOBFMT string \s-1\fIsee below\fP\s+1
! format string for job status results
! .TP 43
! ModemFmt FAXMODEMFMT string \s-1\fIsee below\fP\s+1
! format string for modem status results
! .TP 43
! Port - integer \s-14559\s+1
! port to use in contacting server
! .TP 43
! Protocol FAXSERVICE string \s-1tcp\s+1
! protocol to use in contacting server
! .TP 43
! RcvFmt FAXRCVFMT string \s-1\fIsee below\fP\s+1
! format string for received facsimile status results
! .TP 43
! TimeZone - string \s-1GMT\s+1s
! timezone to use for reporting dates and times
! .TP 43
! Verbose - boolean \s-1No\s+1
! whether or not to enable protocol tracing
.PP
The configuration parameters are explained below:
.TP 14
.B FileFmt
The format string to use when returning file status information with the
.B \-f
! option. (Equivalent to the
! .B FAXFILEFMT
! environment variable.)
Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
***************
*** 233,239 ****
The host to contact for service.
(Equivalent to the
.B \-h
! option.)
.TP 14
.B JobFmt
The format string to use when returning job status information for
--- 260,268 ----
The host to contact for service.
(Equivalent to the
.B \-h
! option or the
! .B FAXSERVER
! environment variable.)
.TP 14
.B JobFmt
The format string to use when returning job status information for
***************
*** 241,248 ****
.B \-s
and
.B \-d
! options.
! Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
Each item can include field width, precision, left-justification,
--- 270,278 ----
.B \-s
and
.B \-d
! options. (Equivalent to the
! .B FAXJOBFMT
! environment variable.) Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
Each item can include field width, precision, left-justification,
***************
*** 375,381 ****
.TP 14
.B ModemFmt
The format string to use when returning modem status information.
! Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
Each item can include field width, precision, left-justification,
--- 405,413 ----
.TP 14
.B ModemFmt
The format string to use when returning modem status information.
! (Equivalent to the
! .B FAXMODEMFMT
! environment variable.) Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
Each item can include field width, precision, left-justification,
***************
*** 413,419 ****
.B RcvFmt
The format string to use when returning status information for the
.B \-r
! option.
Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.
--- 445,453 ----
.B RcvFmt
The format string to use when returning status information for the
.B \-r
! option. (Equivalent to the
! .B FAXRCVFMT
! environment variable.)
Formats are specified using
.IR printf (3S)-\c
style conventions but using the field identifiers listed below.