xref: /original-bsd/old/vpr/vpq.c (revision 2301fdfb)
1 /* vpq.c		11/04/87
2  * Varian and Versatec queue
3  */
4 
5 static char vpqSCCSid[] = "@(#)vpq.c	1.4\t11/04/87";
6 
7 #include <sys/param.h>
8 #include <sys/dir.h>
9 #include <sys/stat.h>
10 #include <stdio.h>
11 #include <errno.h>
12 #define	MAXJOBS 100
13 
14 struct	stat stbuf;
15 int	nextflag;
16 int	linecnt;
17 FILE	*jf;
18 char	line[100];
19 char	username[10];
20 int	cnt;
21 extern	int errno;
22 extern	char _sobuf[];
23 
24 main(argc, argv)
25 int argc;
26 char **argv;
27 {
28 	int varian = 1;
29 	int versatec = 1;
30 
31 	setbuf(stdout, _sobuf);
32 
33 	argc--, argv++;
34 	while (argc > 0 && argv[0][0] == '-') {
35 		switch (argv[0][1]) {
36 
37 		case 'W':		/* Wide: the versatec. */
38 			varian = 0;
39 			versatec++;
40 			break;
41 
42 		case 'b':
43 			varian++;
44 			versatec++;
45 			break;
46 
47 		default:
48 			fprintf(stderr, "usage: vpq [ -W ] [ -b ]\n");
49 			exit(1);
50 		}
51 		argc--, argv++;
52 	}
53 	if (varian)
54 		queue("/dev/va0", "Varian", "/usr/spool/vad", "/usr/lib/vad");
55 	if (versatec)
56 		queue("/dev/vp0", "Versatec", "/usr/spool/vpd", "/usr/lib/vpd");
57 	exit(0);
58 }
59 
60 
61 queue(device, devname, spooldir, daemon)
62 char *device, *devname, *spooldir, *daemon;
63 {
64 	FILE *vc;
65 	DIR *df;
66 	register struct direct *dirp;
67 
68 	printf("%s: ", devname);
69 	vc = fopen(device, "w");
70 	if (vc == NULL) {
71 		if (errno == EIO)
72 			printf("offline\n");
73 		else if (errno == ENXIO)
74 			printf("in use\n");
75 		else
76 			printf("not available\n");
77 	} else {
78 		printf("ready and idle.\n");
79 		fclose(vc);
80 	}
81 	if (access(daemon, 1))
82 		printf("Daemon is disabled.\n");
83 	if (chdir(spooldir) < 0) {
84 		perror(spooldir);
85 		return;
86 	}
87 	df = opendir(".");
88 	if (df == NULL) {
89 		perror(spooldir);
90 		return;
91 	}
92 	linecnt = 0;
93 	cnt = 0;
94 	while ((dirp = readdir(df)) != NULL) {
95 		if (dirp->d_name[0] != 'd')
96 			continue;
97 		if (dirp->d_name[1] != 'f')
98 			continue;
99 		if (stat(dirp->d_name, &stbuf) < 0)
100 			continue;
101 		if (cnt == 0)
102 			printf("Owner\t  Id      Chars  Filename\n");
103 		cnt++;
104 		process(dirp);
105 	}
106 	closedir(df);
107 	if (cnt == 0)
108 		printf("Queue is empty.\n");
109 	printf("\n");
110 }
111 
112 process(dirp)
113 	register struct direct *dirp;
114 {
115 
116 	jf = fopen(dirp->d_name, "r");
117 	if (jf == NULL)
118 		return;
119 	while (getline()) {
120 		switch (line[0]) {
121 
122 		case 'L':
123 			strcpy(username, line+1);
124 			break;
125 
126 		case 'C':
127 		case 'V':
128 		case 'F':
129 		case 'G':
130 		case 'P':
131 		case 'T':
132 			if (stat(line+1, &stbuf) < 0)
133 				stbuf.st_size = 0;
134 			printf("%-10s%5s%8d  %s\n", username,
135 			    &(dirp->d_name[3]), stbuf.st_size, line+1);
136 			break;
137 		}
138 	}
139 	fclose(jf);
140 }
141 
142 getline()
143 {
144 	register int i, c;
145 
146 	i = 0;
147 	while ((c = getc(jf)) != '\n') {
148 		if (c <= 0)
149 			return(0);
150 		if (i < 100)
151 			line[i++] = c;
152 	}
153 	line[i++] = 0;
154 	return (1);
155 }
156