Annotation of 42BSD/usr.bin/uucp/uusnap.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)uusnap.c   5.2 (Berkeley) 7/2/83";
                      3: #endif
                      4: 
                      5: /*
                      6:  *     Uusnap - displays a snapshot of the uucp system.
                      7:  *                                     RJKing WECo-MG6565 May 83
                      8:  */
                      9: 
                     10: #include "uucp.h"
                     11: #include <sys/types.h>
                     12: #include <sys/stat.h>
                     13: #ifdef NDIR
                     14: #include "ndir.h"
                     15: #else
                     16: #include <sys/dir.h>
                     17: #endif
                     18: 
                     19: #ifndef        SYSBUF
                     20: char SYSBUF[BUFSIZ];
                     21: #endif
                     22: 
                     23: #define        NSYSTEM 100                             /* max # of systems queued */
                     24: #define        SPOOLDR "/usr/spool/uucp"               /* Where STST files are */
                     25: #ifdef UUDIR
                     26: #define        CMDSDIR "/usr/spool/uucp/C."            /* Name of commands dir */
                     27: #define        DATADIR "/usr/spool/uucp/D."            /* Name of data directory */
                     28: #define        XEQTDIR "/usr/spool/uucp/X."            /* Name of execute dir */
                     29: #else
                     30: #define        CMDSDIR "/usr/spool/uucp"               /* Name of commands dir */
                     31: #define        DATADIR "/usr/spool/uucp"               /* Name of data directory */
                     32: #define        XEQTDIR "/usr/spool/uucp"               /* Name of execute dir */
                     33: #endif
                     34: 
                     35: #define        CMDSLEN 5                               /* Length of trailer */
                     36: #define        DATALEN 5                               /* Length of trailer */
                     37: /* rti!trt: XEQTLEN was 0, for reverse search, but that did not work. */
                     38: #define        XEQTLEN 5                               /* Length of trailer */
                     39: #define        NUMCTRS 3                               /* # file types to count */
                     40: #define        CMDTYPE 0                               /* Index into scnt.cntr */
                     41: #define        DATTYPE 1                               /* Index into scnt.cntr */
                     42: #define        XEQTYPE 2                               /* Index into scnt.cntr */
                     43: 
                     44: void   scandir(), getstst();
                     45: extern char *index(), *rindex(), *strcpy(), *strncpy();;
                     46: extern long atol();
                     47: extern time_t  time();
                     48: 
                     49: struct scnt {                                  /* System count structure */
                     50:                char    name[16];               /* Name of system */
                     51:                short   cntr[NUMCTRS];          /* Count */
                     52:                char    stst[32];               /* STST Message */
                     53:                short   locked;                 /* If LCK..sys present */
                     54:                int     st_type;                /* STST Type */
                     55:                int     st_count;               /* STST Count */
                     56:                time_t  st_lastime;             /* STST Last time tried */
                     57:                time_t  st_retry;               /* STST Secs to retry */
                     58:             };
                     59: 
                     60: int    sndx;                                   /* Number of systems */
                     61: struct scnt    sys[NSYSTEM];                   /* Systems queued */
                     62: 
                     63: main()
                     64: {      register int i, j, nlen = 0;
                     65:        time_t  curtime, t;
                     66: 
                     67:        setbuf(stdout, SYSBUF);
                     68:        scandir(CMDSDIR, "C.", CMDSLEN, NULL, CMDTYPE);
                     69:        scandir(DATADIR, "D.", DATALEN, NULL, DATTYPE);
                     70:        scandir(XEQTDIR, "X.", XEQTLEN, 'X', XEQTYPE);
                     71:        getstst(SPOOLDR);
                     72:        time(&curtime);
                     73:        for(i=0; i<sndx; ++i)
                     74:                if((j = strlen(sys[i].name)) > nlen)
                     75:                        nlen = j;
                     76:        for(i=0; i<sndx; ++i)
                     77:        {       printf("%-*.*s ", nlen, nlen, sys[i].name);
                     78:                if(sys[i].cntr[CMDTYPE])
                     79:                        printf("%3.d Cmd%s ", sys[i].cntr[CMDTYPE],
                     80:                                sys[i].cntr[CMDTYPE]>1?"s":" ");
                     81:                else    printf("   ---   ");
                     82:                if(sys[i].cntr[DATTYPE])
                     83:                        printf("%3.d Data ", sys[i].cntr[DATTYPE]);
                     84:                else    printf("   ---   ");
                     85:                if(sys[i].cntr[XEQTYPE])
                     86:                        printf("%3.d Xqt%s ", sys[i].cntr[XEQTYPE],
                     87:                                sys[i].cntr[XEQTYPE]>1?"s":" ");
                     88:                else    printf("   ---   ");
                     89:                if(*sys[i].stst == NULL)
                     90:                {       if(sys[i].locked)
                     91:                                printf("LOCKED\n");
                     92:                        else    printf("\n");
                     93:                        continue;
                     94:                }
                     95:                printf("%s  ", sys[i].stst);
                     96:                if(sys[i].st_type == SS_INPROGRESS)
                     97:                {       printf("\n");
                     98:                        continue;
                     99:                }
                    100:                t = (sys[i].st_lastime +sys[i].st_retry) - curtime;
                    101:                if(t <= 0)
                    102:                        printf("Retry time reached  ");
                    103:                else
                    104:                {       if(t < 60)
                    105:                                printf("Retry time %ld sec%s  ", (long)(t%60),
                    106:                                        (t%60)!=1? "s": "");
                    107:                        else    printf("Retry time %ld min%s  ", (long)(t/60),
                    108:                                        (t/60)!=1? "s": "");
                    109:                }
                    110:                if(sys[i].st_count > 1)
                    111:                        printf("Count: %d\n", sys[i].st_count);
                    112:                else    printf("\n");
                    113:        }
                    114:        exit(0);
                    115: }
                    116: void scandir(dnam, prfx, flen, fchr, type)
                    117: char *dnam, *prfx, fchr;
                    118: {      register int i, plen;
                    119:        char    fnam[MAXNAMLEN+1];
                    120:        register struct direct *dentp;
                    121:        register DIR *dirp;
                    122: 
                    123:        plen = strlen(prfx);
                    124:        if(chdir(dnam) < 0)
                    125:        {       perror(dnam);
                    126:                exit(1);
                    127:        }
                    128:        if ((dirp = opendir(".", "r")) == NULL)
                    129:        {       perror(dnam);
                    130:                exit(1);
                    131:        }
                    132:        while((dentp = readdir(dirp)) != NULL)
                    133:        {       if(*dentp->d_name == '.' || dentp->d_ino == 0)
                    134:                        continue;
                    135:                if(strncmp(dentp->d_name, prfx, plen) != SAME) {
                    136: #ifdef UUDIR
                    137:                        fprintf(stderr, "strange file (%s) in %s\n",
                    138:                                dentp->d_name, dnam);
                    139: #endif
                    140:                        continue;
                    141:                }
                    142:                strcpy(fnam, &dentp->d_name[plen]);
                    143:                i = strlen(fnam);
                    144:                if(flen > 0)
                    145:                        fnam[i -flen] = NULL;
                    146:                else
                    147:                for(; i>0; --i)
                    148:                {       if(fnam[i] == fchr)
                    149:                        {       fnam[i] = NULL;
                    150:                                break;
                    151:                        }
                    152:                }
                    153:                for(i=0; i<sndx; ++i)
                    154:                {       if(strcmp(fnam, sys[i].name) == SAME)
                    155:                        {       ++sys[i].cntr[type];
                    156:                                break;
                    157:                        }
                    158:                }
                    159:                if(i == sndx)
                    160:                {       strcpy(sys[i].name, fnam);
                    161:                        ++sys[i].cntr[type];
                    162:                        ++sndx;
                    163:                }
                    164:        }
                    165:        closedir(dirp);
                    166: }
                    167: void getstst(sdir)
                    168: char *sdir;
                    169: {      register int i, csys;
                    170:        register char *tp;
                    171:        char    fnam[MAXNAMLEN+1], buff[128];
                    172:        register struct direct *dentp;
                    173:        register DIR *dirp;
                    174:        register FILE *st;
                    175: 
                    176:        if(chdir(sdir) < 0)
                    177:        {       perror(sdir);
                    178:                exit(1);
                    179:        }
                    180:        if((dirp = opendir(".", "r")) == NULL)
                    181:        {       perror(sdir);
                    182:                exit(1);
                    183:        }
                    184:        while((dentp = readdir(dirp)) != NULL)
                    185:        {       if(dentp->d_ino == 0)
                    186:                        continue;
                    187:                if(strncmp(dentp->d_name, "LCK..", 5) == SAME)
                    188:                {       if(strncmp(&dentp->d_name[5], "tty", 3) == SAME ||
                    189:                           strncmp(&dentp->d_name[5], "cul", 3) == SAME)
                    190:                                continue;
                    191:                        strcpy(fnam, dentp->d_name);
                    192:                        for(csys=0; csys<sndx; ++csys)
                    193:                        {       if(strcmp(&fnam[5], sys[csys].name) == SAME)
                    194:                                        break;
                    195:                        }
                    196:                        if(csys == sndx)
                    197:                        {       strcpy(sys[csys].name, &fnam[5]);
                    198:                                ++sndx;
                    199:                        }
                    200:                        ++sys[csys].locked;
                    201:                        continue;
                    202:                }
                    203:                if(strncmp(dentp->d_name, "STST.", 5) == SAME)
                    204:                {       strcpy(fnam, dentp->d_name);
                    205:                        for(csys=0; csys<sndx; ++csys)
                    206:                        {       if(strcmp(&fnam[5], sys[csys].name) == SAME)
                    207:                                        break;
                    208:                        }
                    209:                        if(csys == sndx)
                    210:                        {       strcpy(sys[csys].name, &fnam[5]);
                    211:                                ++sndx;
                    212:                        }
                    213:                        if((st = fopen(fnam, "r")) == NULL)
                    214:                        {       strncpy(sys[csys].stst, "",
                    215:                                        sizeof(sys[csys].stst));
                    216:                                continue;
                    217:                        }
                    218:                        strncpy(buff, "", sizeof(buff));
                    219:                        fgets(buff, sizeof(buff), st);
                    220:                        fclose(st);
                    221:                        if(tp = rindex(buff, ' '))
                    222:                                *tp = NULL;             /* drop system name */
                    223:                        else    continue;
                    224:                        for(i=0, tp=buff;  i<4;  ++i, ++tp)
                    225:                                if((tp = index(tp, ' ')) == NULL)
                    226:                                        break;
                    227:                        if(i != 4)
                    228:                                continue;
                    229:                        strncpy(sys[csys].stst, tp, sizeof(sys[csys].stst));
                    230:                        tp = buff;
                    231:                        sys[csys].st_type = atoi(tp);
                    232:                        tp = index(tp+1, ' ');
                    233:                        sys[csys].st_count = atoi(tp+1);
                    234:                        tp = index(tp+1, ' ');
                    235:                        sys[csys].st_lastime = (time_t)atol(tp+1);
                    236:                        tp = index(tp+1, ' ');
                    237:                        sys[csys].st_retry = (time_t)atol(tp+1);
                    238:                }
                    239:        }
                    240:        closedir(dirp);
                    241: }
                    242: /* @(#)index.c 4.1 (Berkeley) 12/21/80 */
                    243: /*
                    244:  * Return the ptr in sp at which the character c appears;
                    245:  * NULL if not found
                    246:  */
                    247: 
                    248: 
                    249: char *
                    250: index(sp, c)
                    251: register char *sp, c;
                    252: {
                    253:        do {
                    254:                if (*sp == c)
                    255:                        return(sp);
                    256:        } while (*sp++);
                    257:        return(NULL);
                    258: }
                    259: 
                    260: /* @(#)rindex.c        4.1 (Berkeley) 12/21/80 */
                    261: /*
                    262:  * Return the ptr in sp at which the character c last
                    263:  * appears; NULL if not found
                    264: */
                    265: 
                    266: 
                    267: char *
                    268: rindex(sp, c)
                    269: register char *sp, c;
                    270: {
                    271:        register char *r;
                    272: 
                    273:        r = NULL;
                    274:        do {
                    275:                if (*sp == c)
                    276:                        r = sp;
                    277:        } while (*sp++);
                    278:        return(r);
                    279: }

unix.superglobalmegacorp.com

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