|
|
1.1 ! root 1: /* ! 2: * Varian and 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: int nextflag; ! 15: int linecnt; ! 16: FILE *df; ! 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: ! 66: printf("%s: ", devname); ! 67: vc = fopen(device, "w"); ! 68: if (vc == NULL) { ! 69: if (errno == EIO) ! 70: printf("offline\n"); ! 71: else if (errno == ENXIO) ! 72: printf("in use\n"); ! 73: else ! 74: printf("not available\n"); ! 75: } else { ! 76: printf("ready and idle.\n"); ! 77: fclose(vc); ! 78: } ! 79: if (access(daemon, 1)) ! 80: printf("Daemon is disabled.\n"); ! 81: if (chdir(spooldir) < 0) { ! 82: perror(spooldir); ! 83: return; ! 84: } ! 85: oloop: ! 86: df = fopen(".", "r"); ! 87: if (df == NULL) { ! 88: perror(spooldir); ! 89: return; ! 90: } ! 91: loop: ! 92: fseek(df, 0l, 0); ! 93: linecnt = 0; ! 94: cnt = 0; ! 95: while (fread(&dirent, sizeof dirent, 1, df) == 1) { ! 96: if (dirent.d_ino == 0) ! 97: continue; ! 98: if (dirent.d_name[0] != 'd') ! 99: continue; ! 100: if (dirent.d_name[1] != 'f') ! 101: continue; ! 102: if (stat(dirent.d_name, &stbuf) < 0) ! 103: continue; ! 104: if (cnt == 0) ! 105: printf("Owner\t Id Chars Filename\n"); ! 106: cnt++; ! 107: process(); ! 108: } ! 109: if (cnt == 0) ! 110: printf("Queue is empty.\n"); ! 111: printf("\n"); ! 112: } ! 113: ! 114: process() ! 115: { ! 116: ! 117: jf = fopen(dirent.d_name, "r"); ! 118: if (jf == NULL) ! 119: return; ! 120: while (getline()) { ! 121: switch (line[0]) { ! 122: ! 123: case 'L': ! 124: strcpy(username, line+1); ! 125: break; ! 126: ! 127: case 'B': ! 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, dirent.d_name+3, ! 135: 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.