![]() |
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.