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 } 156