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