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: }

Defined functions

getstst defined in line 167; used 2 times
index defined in line 249; used 5 times
main defined in line 63; never used
rindex defined in line 267; used 7 times
scandir defined in line 116; used 4 times

Defined variables

SYSBUF defined in line 20; used 2 times
sccsid defined in line 2; never used
sndx defined in line 60; used 11 times
sys defined in line 61; used 35 times

Defined struct's

scnt defined in line 49; used 2 times
  • in line 61(2)

Defined macros

CMDSDIR defined in line 30; used 1 times
  • in line 68
CMDSLEN defined in line 35; used 1 times
  • in line 68
CMDTYPE defined in line 40; used 4 times
DATADIR defined in line 31; used 1 times
  • in line 69
DATALEN defined in line 36; used 1 times
  • in line 69
DATTYPE defined in line 41; used 3 times
NSYSTEM defined in line 23; used 1 times
  • in line 61
NUMCTRS defined in line 39; used 1 times
  • in line 51
SPOOLDR defined in line 24; used 1 times
  • in line 71
XEQTDIR defined in line 32; used 1 times
  • in line 70
XEQTLEN defined in line 38; used 1 times
  • in line 70
XEQTYPE defined in line 42; used 4 times
Last modified: 1983-07-03
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1420
Valid CSS Valid XHTML 1.0 Strict