|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)lpq.c 4.5 (Berkeley) 7/17/83";
3: #endif
4:
5: /*
6: * Spool Queue examination program
7: *
8: * lpq [+[n]] [-Pprinter] [user...] [job...]
9: *
10: * + means continually scan queue until empty
11: * -P used to identify printer as per lpr/lprm
12: */
13:
14: #include "lp.h"
15:
16: char *user[MAXUSERS]; /* users to process */
17: int users; /* # of users in user array */
18: int requ[MAXREQUESTS]; /* job number of spool entries */
19: int requests; /* # of spool requests */
20:
21: static int repeat; /* + flag indicator */
22: static int slptime = 30; /* pause between screen refereshes */
23: static int lflag; /* long output option */
24:
25: /*
26: * Termcap stuff for fancy display
27: */
28: #ifdef TERMCAP
29: struct sgttyb sbuf;
30: static unsigned ospeed;
31: static int dumb; /* whether to use capabilities */
32: static char PC; /* pad character for output */
33: static char *UP; /* up one line */
34: static char *BC; /* backspace character, other than \b */
35: static char *CM; /* cursor motion */
36: static char *CL; /* clear display */
37: static char *TI; /* terminal init for CM */
38: static char *TE; /* terminal clear for CM */
39: static char *SO; /* stand out start */
40: static char *SE; /* stand out end */
41:
42: char *tgetstr();
43: int putch(); /* for tputs' */
44: #endif
45:
46: main(argc, argv)
47: char *argv[];
48: {
49: register char *arg;
50: register int n;
51:
52: name = argv[0];
53: gethostname(host, sizeof(host));
54:
55: while (--argc) {
56: if ((arg = *++argv)[0] == '+') {
57: if (arg[1] != '\0')
58: if ((n = atoi(&arg[1])) > 0)
59: slptime = n;
60: repeat++;
61: } else if (arg[0] == '-')
62: switch (arg[1]) {
63: case 'P': /* printer name */
64: if (arg[2])
65: printer = &arg[2];
66: else if (argc > 1) {
67: argc--;
68: printer = *++argv;
69: }
70: break;
71:
72: case 'l': /* long output */
73: lflag++;
74: break;
75:
76: default:
77: usage();
78: } else {
79: if (isdigit(arg[0])) {
80: if (requests >= MAXREQUESTS)
81: fatal("too many requests");
82: requ[requests++] = atoi(arg);
83: } else {
84: if (users >= MAXUSERS)
85: fatal("too many users");
86: user[users++] = arg;
87: }
88: }
89: }
90: if (printer == NULL && (printer = getenv("PRINTER")) == NULL)
91: printer = DEFLP;
92: #ifdef TERMCAP
93: dumb = termcap();
94: #endif
95:
96: if (repeat) {
97: #ifdef TERMCAP
98: if (TI)
99: tputs(TI, 0, putch);
100: #endif
101: do {
102: #ifdef TERMCAP
103: if (!dumb) {
104: tputs(CL, 0, putch);
105: tputs(tgoto(CM, 0, 0), 0, putch);
106: }
107: #endif
108: if ((n = displayq(lflag)) > 0)
109: sleep(slptime);
110: } while (n > 0);
111: #ifdef TERMCAP
112: if (!dumb) {
113: standout(stdout, "Hit return to continue");
114: while (getchar() != '\n');
115: if (TE)
116: tputs(TE, 0, putch);
117: }
118: #endif
119: } else
120: displayq(lflag);
121: }
122:
123: static
124: usage()
125: {
126: printf("usage: lpq [-Pprinter] [-l] [+[n]] [user...] [job...]\n");
127: exit(1);
128: }
129:
130: /*
131: * If we have the capability, print this in standout mode
132: */
133: static
134: standout(f, s, a1, a2)
135: FILE *f;
136: char *s;
137: {
138: #ifdef TERMCAP
139: if (SO)
140: tputs(SO, 0, putch);
141: fprintf(f, s, a1, a2);
142: if (SO && SE)
143: tputs(SE, 0, putch);
144: #else
145: fprintf(f, s, a1, a2);
146: #endif
147: }
148:
149: #ifdef TERMCAP
150: static char *
151: capstrings[] = {
152: "bc", "cl", "cm", "so", "se", "ti", "te", "up",
153: 0
154: };
155:
156: static char **
157: caps[] = {
158: &BC, &CL, &CM, &SO, &SE, &TI, &TE, &UP,
159: };
160:
161: /*
162: * All we need from termcap is to clear screen and
163: * position cursor at the top; if these aren't available
164: * we say the terminal is dumb and let things scroll
165: */
166: static
167: termcap()
168: {
169: char *term, tbuf[BUFSIZ];
170: static char buf[BUFSIZ/2];
171: register short columns;
172: char *bp = buf;
173: register char **p, ***q, *cp;
174:
175: ioctl(0, TIOCGETP, (char *)&sbuf);
176: ospeed = sbuf.sg_ospeed;
177: if ((term = getenv("TERM")) != NULL && tgetent(tbuf, term) > 0) {
178: for (p = capstrings, q = caps; *p != NULL; p++, q++)
179: **q = tgetstr(*p, &bp);
180: if ((cp = tgetstr("pc", &bp)) != NULL)
181: PC = *cp;
182: }
183: return(CL == NULL || CM == NULL);
184: }
185:
186: /*
187: * Putchar writearound for tputs
188: */
189: static
190: putch(c)
191: char c;
192: {
193: putchar(c);
194: }
195: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.