Annotation of 42BSD/usr.bin/uucp/uusnap.c, revision 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.