#ifndef lint static char sccsid[] = "@(#)uusnap.c 5.2 (Berkeley) 7/2/83"; #endif /* * Uusnap - displays a snapshot of the uucp system. * RJKing WECo-MG6565 May 83 */ #include "uucp.h" #include #include #ifdef NDIR #include "ndir.h" #else #include #endif #ifndef SYSBUF char SYSBUF[BUFSIZ]; #endif #define NSYSTEM 100 /* max # of systems queued */ #define SPOOLDR "/usr/spool/uucp" /* Where STST files are */ #ifdef UUDIR #define CMDSDIR "/usr/spool/uucp/C." /* Name of commands dir */ #define DATADIR "/usr/spool/uucp/D." /* Name of data directory */ #define XEQTDIR "/usr/spool/uucp/X." /* Name of execute dir */ #else #define CMDSDIR "/usr/spool/uucp" /* Name of commands dir */ #define DATADIR "/usr/spool/uucp" /* Name of data directory */ #define XEQTDIR "/usr/spool/uucp" /* Name of execute dir */ #endif #define CMDSLEN 5 /* Length of trailer */ #define DATALEN 5 /* Length of trailer */ /* rti!trt: XEQTLEN was 0, for reverse search, but that did not work. */ #define XEQTLEN 5 /* Length of trailer */ #define NUMCTRS 3 /* # file types to count */ #define CMDTYPE 0 /* Index into scnt.cntr */ #define DATTYPE 1 /* Index into scnt.cntr */ #define XEQTYPE 2 /* Index into scnt.cntr */ void scandir(), getstst(); extern char *index(), *rindex(), *strcpy(), *strncpy();; extern long atol(); extern time_t time(); struct scnt { /* System count structure */ char name[16]; /* Name of system */ short cntr[NUMCTRS]; /* Count */ char stst[32]; /* STST Message */ short locked; /* If LCK..sys present */ int st_type; /* STST Type */ int st_count; /* STST Count */ time_t st_lastime; /* STST Last time tried */ time_t st_retry; /* STST Secs to retry */ }; int sndx; /* Number of systems */ struct scnt sys[NSYSTEM]; /* Systems queued */ main() { register int i, j, nlen = 0; time_t curtime, t; setbuf(stdout, SYSBUF); scandir(CMDSDIR, "C.", CMDSLEN, NULL, CMDTYPE); scandir(DATADIR, "D.", DATALEN, NULL, DATTYPE); scandir(XEQTDIR, "X.", XEQTLEN, 'X', XEQTYPE); getstst(SPOOLDR); time(&curtime); for(i=0; i nlen) nlen = j; for(i=0; i1?"s":" "); else printf(" --- "); if(sys[i].cntr[DATTYPE]) printf("%3.d Data ", sys[i].cntr[DATTYPE]); else printf(" --- "); if(sys[i].cntr[XEQTYPE]) printf("%3.d Xqt%s ", sys[i].cntr[XEQTYPE], sys[i].cntr[XEQTYPE]>1?"s":" "); else printf(" --- "); if(*sys[i].stst == NULL) { if(sys[i].locked) printf("LOCKED\n"); else printf("\n"); continue; } printf("%s ", sys[i].stst); if(sys[i].st_type == SS_INPROGRESS) { printf("\n"); continue; } t = (sys[i].st_lastime +sys[i].st_retry) - curtime; if(t <= 0) printf("Retry time reached "); else { if(t < 60) printf("Retry time %ld sec%s ", (long)(t%60), (t%60)!=1? "s": ""); else printf("Retry time %ld min%s ", (long)(t/60), (t/60)!=1? "s": ""); } if(sys[i].st_count > 1) printf("Count: %d\n", sys[i].st_count); else printf("\n"); } exit(0); } void scandir(dnam, prfx, flen, fchr, type) char *dnam, *prfx, fchr; { register int i, plen; char fnam[MAXNAMLEN+1]; register struct direct *dentp; register DIR *dirp; plen = strlen(prfx); if(chdir(dnam) < 0) { perror(dnam); exit(1); } if ((dirp = opendir(".", "r")) == NULL) { perror(dnam); exit(1); } while((dentp = readdir(dirp)) != NULL) { if(*dentp->d_name == '.' || dentp->d_ino == 0) continue; if(strncmp(dentp->d_name, prfx, plen) != SAME) { #ifdef UUDIR fprintf(stderr, "strange file (%s) in %s\n", dentp->d_name, dnam); #endif continue; } strcpy(fnam, &dentp->d_name[plen]); i = strlen(fnam); if(flen > 0) fnam[i -flen] = NULL; else for(; i>0; --i) { if(fnam[i] == fchr) { fnam[i] = NULL; break; } } for(i=0; id_ino == 0) continue; if(strncmp(dentp->d_name, "LCK..", 5) == SAME) { if(strncmp(&dentp->d_name[5], "tty", 3) == SAME || strncmp(&dentp->d_name[5], "cul", 3) == SAME) continue; strcpy(fnam, dentp->d_name); for(csys=0; csysd_name, "STST.", 5) == SAME) { strcpy(fnam, dentp->d_name); for(csys=0; csys