|
|
1.1 root 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:
12: struct dir dirent;
13: struct stat stbuf;
14: char vpddir[] = "/usr/vpd";
15: int nextflag;
16: int linecnt;
17: FILE *df;
18: FILE *jf;
19: char line[100];
20: char username[10];
21: int cnt;
22: extern int errno;
23:
24: main()
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: }
46: oloop:
47: df = fopen(".", "r");
48: if (df == NULL) {
49: perror(vpddir);
50: exit(1);
51: }
52: loop:
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:
75: process()
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:
102: getline()
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.