|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.