Annotation of 41BSD/cmd/lpr/lpq.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Line printer queue
                      3:  */
                      4: 
                      5: #include <sys/types.h>
                      6: #include <dir.h>
                      7: #include <stat.h>
                      8: #include <stdio.h>
                      9: 
                     10: #define        MAXJOBS 100
                     11: 
                     12: struct dir dirent;
                     13: struct stat stbuf;
                     14: char   lpddir[] =      "/usr/spool/lpd";
                     15: int    nextflag;
                     16: int    linecnt;
                     17: FILE   *df;
                     18: FILE   *jf;
                     19: char   line[100];
                     20: char   username[10];
                     21: int    cnt;
                     22: int    isdown;
                     23: 
                     24: main()
                     25: {
                     26: 
                     27:        if (access("/usr/bin/lpr", 1) && access("/bin/lpr", 1)
                     28:            && access("/usr/ucb/lpr", 1))
                     29:                isdown++;
                     30:        if (chdir(lpddir) < 0) {
                     31:                perror(lpddir);
                     32:                exit(1);
                     33:        }
                     34: oloop:
                     35:        df = fopen(".", "r");
                     36:        if (df == NULL) {
                     37:                perror(lpddir);
                     38:                exit(1);
                     39:        }
                     40: loop:
                     41:        fseek(df, 0l, 0);
                     42:        linecnt = 0;
                     43:        cnt = 0;
                     44:        while (fread(&dirent, sizeof dirent, 1, df) == 1) {
                     45:                if (dirent.d_ino == 0)
                     46:                        continue;
                     47:                if (dirent.d_name[0] != 'd')
                     48:                        continue;
                     49:                if (dirent.d_name[1] != 'f')
                     50:                        continue;
                     51:                if (stat(dirent.d_name, &stbuf) < 0)
                     52:                        continue;
                     53:                if (cnt == 0)
                     54:                        printf("Owner\t  Id      Chars  Filename\n");
                     55:                cnt++;
                     56:                process();
                     57:        }
                     58:        if (cnt == 0) {
                     59:                if (isdown)
                     60:                        printf("Line printer is down.\n");
                     61:                else
                     62:                        printf("Line printer queue is empty.\n");
                     63:        }
                     64:        exit(0);
                     65: }
                     66: 
                     67: process()
                     68: {
                     69: 
                     70:        jf = fopen(dirent.d_name, "r");
                     71:        if (jf == NULL)
                     72:                return;
                     73:        while (getline()) {
                     74:                switch (line[0]) {
                     75: 
                     76:                case 'L':
                     77:                        strcpy(username, line+1);
                     78:                        break;
                     79: 
                     80:                case 'B':
                     81:                case 'F':
                     82:                        if (stat(line+1, &stbuf) < 0)
                     83:                                stbuf.st_size = 0;
                     84:                        printf("%-10s%5s%8d  %s\n", username, dirent.d_name+3,
                     85:                            stbuf.st_size, line+1);
                     86:                        break;
                     87:                }
                     88:        }
                     89:        close(jf);
                     90: }
                     91: 
                     92: getline()
                     93: {
                     94:        register int i, c;
                     95: 
                     96:        i = 0;
                     97:        while ((c = getc(jf)) != '\n') {
                     98:                if (c <= 0)
                     99:                        return(0);
                    100:                if (i < 100)
                    101:                        line[i++] = c;
                    102:        }
                    103:        line[i++] = 0;
                    104:        return (1);
                    105: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.