BSD 3 development
[unix-history] / usr / src / cmd / versatec / vpq.c
CommitLineData
f981db01
BJ
1/*
2 * Versatec queue
3 */
4
5#include <sys/types.h>
6#include <dir.h>
7#include <stat.h>
8#include <stdio.h>
9#include <errno.h>
10#define MAXJOBS 100
11
12struct dir dirent;
13struct stat stbuf;
14char vpddir[] = "/usr/vpd";
15int nextflag;
16int linecnt;
17FILE *df;
18FILE *jf;
19char line[100];
20char username[10];
21int cnt;
22extern int errno;
23
24main()
25{
26 FILE *vc;
27
28 vc = fopen("/dev/vp0", "w");
29 if (vc == NULL) {
30 if (errno == EIO)
31 printf("Versatec is OFFLINE.\n");
32 else if (errno == ENXIO)
33 /* printf("Versatec in use.\n") */;
34 else
35 printf("Versatec not available.\n");
36 } else {
37 printf("Versatec is ready and idle.\n");
38 fclose(vc);
39 }
40 if (access("/usr/ucb/vpr", 1))
41 printf("Versatec daemon is disabled.\n");
42 if (chdir(vpddir) < 0) {
43 perror(vpddir);
44 exit(1);
45 }
46oloop:
47 df = fopen(".", "r");
48 if (df == NULL) {
49 perror(vpddir);
50 exit(1);
51 }
52loop:
53 fseek(df, 0l, 0);
54 linecnt = 0;
55 cnt = 0;
56 while (fread(&dirent, sizeof dirent, 1, df) == 1) {
57 if (dirent.d_ino == 0)
58 continue;
59 if (dirent.d_name[0] != 'd')
60 continue;
61 if (dirent.d_name[1] != 'f')
62 continue;
63 if (stat(dirent.d_name, &stbuf) < 0)
64 continue;
65 if (cnt == 0)
66 printf("Owner\t Id Chars Filename\n");
67 cnt++;
68 process();
69 }
70 if (cnt == 0)
71 printf("Versatec queue is empty.\n");
72 exit(0);
73}
74
75process()
76{
77
78 jf = fopen(dirent.d_name, "r");
79 if (jf == NULL)
80 return;
81 while (getline()) {
82 switch (line[0]) {
83
84 case 'L':
85 strcpy(username, line+1);
86 break;
87
88 case 'B':
89 case 'F':
90 case 'P':
91 case 'T':
92 if (stat(line+1, &stbuf) < 0)
93 stbuf.st_size = 0;
94 printf("%-10s%5s%8d %s\n", username, dirent.d_name+3,
95 stbuf.st_size, line+1);
96 break;
97 }
98 }
99 close(jf);
100}
101
102getline()
103{
104 register int i, c;
105
106 i = 0;
107 while ((c = getc(jf)) != '\n') {
108 if (c <= 0)
109 return(0);
110 if (i < 100)
111 line[i++] = c;
112 }
113 line[i++] = 0;
114 return (1);
115}