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
main(argc,argv)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
queue(device,devname,spooldir,daemon)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
process(dirp)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
getline()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