diff options
Diffstat (limited to 'usr.sbin/lpr/lpq')
-rw-r--r-- | usr.sbin/lpr/lpq/lpq.1 | 12 | ||||
-rw-r--r-- | usr.sbin/lpr/lpq/lpq.c | 63 |
2 files changed, 62 insertions, 13 deletions
diff --git a/usr.sbin/lpr/lpq/lpq.1 b/usr.sbin/lpr/lpq/lpq.1 index 50e1474121e..d5eadc581f8 100644 --- a/usr.sbin/lpr/lpq/lpq.1 +++ b/usr.sbin/lpr/lpq/lpq.1 @@ -29,9 +29,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" @(#)lpq.1 8.1 (Berkeley) 6/6/93 +.\" @(#)lpq.1 8.2 (Berkeley) 4/28/95 .\" -.Dd June 6, 1993 +.Dd April 28, 1995 .Dt LPQ 1 .Os BSD 4.2 .Sh NAME @@ -39,6 +39,7 @@ .Nd spool queue examination program .Sh SYNOPSIS .Nm lpq +.OP Fl a .Op Fl l .Op Fl P Ns Ar printer .Op job # ... @@ -67,6 +68,9 @@ names or job numbers to filter out only those jobs of interest. Information about each of the files comprising the job entry is printed. Normally, only as much information as will fit on one line is displayed. +.It Fl a +Report on the local queues for all printers, +rather than just the specified printer. .El .Pp For each job submitted (i.e. invocation of @@ -102,7 +106,7 @@ If the following environment variable exists, it is used by Specifies an alternate default printer. .El .Sh FILES -.Bl -tag -width /usr/share/misc/termcap -compact +.Bl -tag -width "/var/spool/*/lock" -compact .It Pa /etc/printcap To determine printer characteristics. .It Pa /var/spool/* @@ -111,8 +115,6 @@ The spooling directory, as determined from printcap. Control files specifying jobs. .It Pa /var/spool/*/lock The lock file to obtain the currently active job. -.It Pa /usr/share/misc/termcap -For manipulating the screen for repeated display. .El .Sh SEE ALSO .Xr lpr 1 , diff --git a/usr.sbin/lpr/lpq/lpq.c b/usr.sbin/lpr/lpq/lpq.c index 02d25b3ca39..828e61badb5 100644 --- a/usr.sbin/lpr/lpq/lpq.c +++ b/usr.sbin/lpr/lpq/lpq.c @@ -39,14 +39,15 @@ static char copyright[] = #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)lpq.c 8.1 (Berkeley) 6/6/93"; +static char sccsid[] = "@(#)lpq.c 8.3 (Berkeley) 5/10/95"; #endif /* not lint */ /* * Spool Queue examination program * - * lpq [-l] [-Pprinter] [user...] [job...] + * lpq [-a] [-l] [-Pprinter] [user...] [job...] * + * -a show all non-null queues on the local machine * -l long output * -P used to identify printer as per lpr/lprm */ @@ -61,6 +62,7 @@ static char sccsid[] = "@(#)lpq.c 8.1 (Berkeley) 6/6/93"; #include <ctype.h> #include "lp.h" #include "lp.local.h" +#include "pathnames.h" int requ[MAXREQUESTS]; /* job number of spool entries */ int requests; /* # of spool requests */ @@ -69,6 +71,7 @@ int users; /* # of users in user array */ uid_t uid, euid; +static int ckqueue __P((char *)); void usage __P((void)); int @@ -78,7 +81,8 @@ main(argc, argv) { extern char *optarg; extern int optind; - int ch, lflag; /* long output option */ + int ch, aflag, lflag; + char *buf, *cp; euid = geteuid(); uid = getuid(); @@ -90,9 +94,12 @@ main(argc, argv) } openlog("lpd", 0, LOG_LPR); - lflag = 0; - while ((ch = getopt(argc, argv, "lP:")) != EOF) + aflag = lflag = 0; + while ((ch = getopt(argc, argv, "alP:")) != EOF) switch((char)ch) { + case 'a': + ++aflag; + break; case 'l': /* long output */ ++lflag; break; @@ -104,7 +111,7 @@ main(argc, argv) usage(); } - if (printer == NULL) { + if (!aflag && printer == NULL) { char *p; printer = DEFLP; @@ -124,13 +131,53 @@ main(argc, argv) user[users++] = *argv; } - displayq(lflag); + if (aflag) { + while (cgetnext(&buf, printcapdb) > 0) { + if (ckqueue(buf) <= 0) { + free(buf); + continue; /* no jobs */ + } + for (cp = buf; *cp; cp++) + if (*cp == '|' || *cp == ':') { + *cp = '\0'; + break; + } + printer = buf; + printf("%s:\n", printer); + displayq(lflag); + free(buf); + printf("\n"); + } + } else + displayq(lflag); exit(0); } +static int +ckqueue(cap) + char *cap; +{ + register struct dirent *d; + DIR *dirp; + char *spooldir; + + if (cgetstr(cap, "sd", &spooldir) == -1) + spooldir = _PATH_DEFSPOOL; + if ((dirp = opendir(spooldir)) == NULL) + return (-1); + while ((d = readdir(dirp)) != NULL) { + if (d->d_name[0] != 'c' || d->d_name[1] != 'f') + continue; /* daemon control files only */ + closedir(dirp); + return (1); /* found something */ + } + closedir(dirp); + return (0); +} + void usage() { - puts("usage: lpq [-l] [-Pprinter] [user ...] [job ...]"); + puts("usage: lpq [-a] [-l] [-Pprinter] [user ...] [job ...]"); exit(1); } |