Annotation of coherent/g/usr/lib/uucp/tay104/contrib/uusnap.c, revision 1.1

1.1     ! root        1: /* uusnap.c
        !             2:    (c) 1992 Heiko W.Rupp [email protected]
        !             3:    uusnap is a tool to display the activities of the connected
        !             4:    systems.
        !             5: 
        !             6:    Put a file uusnap.systems in NEWCONFIGDIR (see Makefile), in which
        !             7:    the systems, you want to monitor are listed, one on a single line.
        !             8:    The sequence of the files there determine the sequence of the
        !             9:    listing.
        !            10: 
        !            11:    At the moment it only works with taylor config and taylor dirs
        !            12: 
        !            13:    compile it form the Makefile or:
        !            14:    cc -c -g -pipe -O  -I. -I. -DNEWCONFIGLIB=\"/usr/local/lib/uucp\" uusnap.c
        !            15:    cc  -o uusnap uusnap.o 
        !            16:    For this, uusnap.[ch] must be in the same directory as uucp.h and so.
        !            17: 
        !            18:    uusnap must have read access to SPOOLDIR/.Status in order to work.
        !            19: */
        !            20: 
        !            21: #define MAXSYS 30              /* maximum number of systems */
        !            22: #define WAIT_NORMAL 10         /* wait period if noone is talking */
        !            23: #define WAIT_TALKING 2         /* refresh display every second if */
        !            24:                                /* someone is talking with us */
        !            25: 
        !            26: #include "uucp.h"
        !            27: #if USE_RCS_ID
        !            28: char uusnap_rcsid[] = "$Id: uusnap.c,v 1.9 92/05/05 22:51:50 hwr Exp Locker: hwr $";
        !            29: #endif
        !            30: 
        !            31: #include <ctype.h>
        !            32: #include <time.h>
        !            33: #include <sys/types.h>
        !            34: #include <sys/dir.h>
        !            35: 
        !            36: extern char *ctime(time_t*);
        !            37: 
        !            38: struct sysInfo  {
        !            39:     char sysname[10];          /* name of the system to watch */
        !            40:     char *statfile;            /* name of its status file */
        !            41:     char *spooldir;            /* root of its spooldir */
        !            42:     int in;                    /* number of unprocessed in-files */
        !            43:     int out;                   /* number of files to send them */
        !            44:     time_t last;               /* last poll time */
        !            45:     time_t next;               /* time of next poll */
        !            46:     time_t lastidir;           /* time of last in-spooldir access */
        !            47:     time_t lastodir;           /* time of last outgoing spd acc */
        !            48:     time_t laststat;           /* time of last status file access */
        !            49:     int status;                        /* status of the system */
        !            50:     int num_retries;           /* number of retries */
        !            51: };
        !            52: 
        !            53: struct sysInfo Systems[MAXSYS];    
        !            54: 
        !            55: 
        !            56: /*  I have extend the system status. If time for the specified system
        !            57:     is Never, I say so. To get this to work, one also should extend
        !            58:     uucico.c. It is not important to do this. With the normal uucico,
        !            59:     one only gets no status.
        !            60: */
        !            61: 
        !            62: const char *azStatus[] =        /* Status codes as defined by uucico  */
        !            63: {                              /* listing them here instead of       */
        !            64:   "Conversation complete",      /* including the appropriate file     */
        !            65:   "Port unavailable",           /* reduces the size of the executable */
        !            66:   "Dial failed",
        !            67:   "Login failed",
        !            68:   "Handshake failed",
        !            69:   "Call failed",
        !            70:   "Talking",
        !            71:   "Wrong time to call",
        !            72:   "Time to call = Never !"
        !            73: };
        !            74: 
        !            75: main()
        !            76: {
        !            77:     int i;
        !            78:     i=get_systems();
        !            79:     display_info(i);
        !            80:     
        !            81:     exit(0);
        !            82: }
        !            83: 
        !            84: int
        !            85: get_systems()
        !            86: {
        !            87:     char filename[1024];
        !            88:     char fn[1024];
        !            89:     char line[80];
        !            90:     FILE *fp;
        !            91:     int i=0;
        !            92:     int j;
        !            93:     struct stat stbuf;
        !            94:     struct sysInfo sys;
        !            95: 
        !            96:     strcpy(filename,NEWCONFIGLIB);
        !            97:     strcat(filename,"/uusnap.systems");
        !            98:     if ((fp=fopen(filename,"r"))!=NULL) {
        !            99:        while (fgets(line,80,fp)!=NULL) {
        !           100:            *(rindex(line,'\n'))='\0';
        !           101:            strcpy(sys.sysname,line); /* get the name of the system */
        !           102:            strcpy(fn,SPOOLDIR); /* get the name of the statusfile */
        !           103:            strcat(fn,"/.Status/");
        !           104:            strcat(fn,line);
        !           105:            sys.statfile=malloc(strlen(fn)+1);
        !           106:            strcpy(sys.statfile,fn);
        !           107:            strcpy(fn,SPOOLDIR); /* get the name of the spooldir */
        !           108:            strcat(fn,"/");
        !           109:            strcat(fn,line);
        !           110:            sys.spooldir=malloc(strlen(fn)+1);
        !           111:            strcpy(sys.spooldir,fn);
        !           112:            sys.laststat=0;
        !           113:            sys.lastidir=sys.lastodir=0;
        !           114:            Systems[i]=sys;             /* get_stat_for_system needs it */
        !           115:            get_stat_for_system(i);     /* now get the system status */
        !           116:            get_inq_num(i,TRUE);        /* number of unprocessed files */
        !           117:            get_outq_num(i,TRUE);       /* number of files to send */
        !           118:            i++;        
        !           119:        }
        !           120:        fclose(fp);
        !           121:     }
        !           122:     else {
        !           123:        fprintf(stderr,"Can't open %s \n",filename);
        !           124:        exit(1);
        !           125:     }
        !           126:     return i;
        !           127: }
        !           128: 
        !           129:            
        !           130: 
        !           131: display_info(int numSys)
        !           132: {
        !           133:     char *filename;
        !           134:     int sysnum;
        !           135:     FILE *fp;
        !           136:     char contentline[80];
        !           137:     char isTalking=FALSE;
        !           138:     struct stat stbuf;
        !           139:     struct sysInfo sys;
        !           140:     time_t time;
        !           141: 
        !           142:     filename = (char*)malloc(1024);
        !           143:     if (filename == NULL) {
        !           144:        fprintf(stderr, "Can't malloc 1024 bytes");
        !           145:        exit(1);
        !           146:     }
        !           147:        
        !           148:     while(TRUE) {
        !           149:        display_headline();
        !           150:        for (sysnum=0;sysnum<numSys;sysnum++) {
        !           151:            sys = Systems[sysnum];
        !           152:            stat(sys.statfile,&stbuf);
        !           153:            if ((time=stbuf.st_atime) > sys.laststat) {
        !           154:                get_stat_for_system(sysnum);
        !           155:            }
        !           156:            if(display_status_line(sysnum)==1)
        !           157:                isTalking=TRUE;
        !           158:        }
        !           159:        if (isTalking) {
        !           160:            sleep(WAIT_TALKING);
        !           161:            isTalking = FALSE;
        !           162:        }
        !           163:        else
        !           164:            sleep(WAIT_NORMAL);            /* wait a bit */
        !           165:     }
        !           166:     return 0;
        !           167: }
        !           168: 
        !           169: int
        !           170: display_status_line(int sn)
        !           171: {
        !           172:     char *time_s;
        !           173:     
        !           174:     int sys_stat,num_retries,wait;
        !           175:     int i;
        !           176:     time_t last_time;
        !           177:     time_t next_time;
        !           178:      
        !           179:     struct sysInfo sys;
        !           180:     
        !           181:     sys = Systems[sn];
        !           182: 
        !           183:     printf("%10s  ",sys.sysname);
        !           184:     get_inq_num(sn);
        !           185:     if (sys.in==0)
        !           186:        printf("     ");
        !           187:     else 
        !           188:        printf("%3d  ",sys.in);
        !           189:     get_outq_num(sn);
        !           190:     if (sys.out==0)
        !           191:        printf("     ");
        !           192:     else
        !           193:        printf("%3d  ",sys.out);
        !           194:     time_s = ctime(&sys.last);
        !           195:     time_s = time_s + 11;
        !           196:     *(time_s+8)='\0';
        !           197:     printf("%8s ",time_s);     /* time of last poll */
        !           198:     time_s = ctime(&sys.next);
        !           199:     time_s = time_s + 11;
        !           200:     *(time_s+8)='\0';
        !           201:     if (sys.last == sys.next) 
        !           202:        printf("           ");
        !           203:     else
        !           204:        printf("%8s   ",time_s);        /* time of next poll */
        !           205:     if (sys.num_retries==0) 
        !           206:        printf("   ");
        !           207:     else 
        !           208:        printf("%2d ",sys.num_retries);
        !           209:     if (sys_stat==6)           /* system is talking */
        !           210:        printf("\E[7m");        /* reverse video on */
        !           211:     printf("%s",azStatus[sys.status]);
        !           212:     if (sys.status==6) {
        !           213:        printf("\E[m\n");       /* reverse video off */
        !           214:        return 1;
        !           215:     }
        !           216:     else {
        !           217:        printf("\n");
        !           218:        return 0;
        !           219:     }
        !           220: }
        !           221: 
        !           222: 
        !           223: display_headline()
        !           224: {
        !           225:     printf("\E[;H\E[2J");      /* clear screen */
        !           226:     printf("\E[7muusnap (press CTRL-C to escape)\E[m \n\n");
        !           227:     printf("  System     #in #out   last     next   #ret    Status\n");
        !           228:     return 0;
        !           229: }
        !           230: 
        !           231: get_inq_num(int num,char firstTime)
        !           232: {
        !           233:     int i=0;
        !           234:     char filename[1024];
        !           235:     struct stat stbuf;
        !           236:     DIR *dirp;
        !           237:     
        !           238:     strcpy(filename,Systems[num].spooldir);
        !           239:     strcat(filename,"/X./.");
        !           240:     stat(filename,&stbuf);
        !           241:     if ((stbuf.st_mtime > Systems[num].lastidir) || (firstTime)) {
        !           242:        if ((dirp=opendir(filename))!=NULL) {
        !           243:            while(readdir(dirp))
        !           244:                i++;
        !           245:            closedir(dirp);
        !           246:            stat(filename,&stbuf);
        !           247:            Systems[num].lastidir=stbuf.st_mtime;
        !           248:        }
        !           249:        else {
        !           250:            fprintf(stderr,"Can't open %s \n",filename);
        !           251:            exit(1);
        !           252:        }
        !           253:        if (i>=2)
        !           254:            i-=2;                       /* correct . and .. */
        !           255:        Systems[num].in=i;
        !           256:     }
        !           257:     return 0;
        !           258: }
        !           259: 
        !           260: get_outq_num(int sys,char firstTime)
        !           261: {
        !           262:     int i=0;
        !           263:     char filename[1024];
        !           264:     struct stat stbuf;
        !           265:     DIR *dirp;
        !           266:     
        !           267:     strcpy(filename,Systems[sys].spooldir);
        !           268:     strcat(filename,"/C./.");
        !           269:     stat(filename,&stbuf);
        !           270:     if ((stbuf.st_mtime > Systems[sys].lastodir) || (firstTime)) {
        !           271:        if ((dirp=opendir(filename))!=NULL) {
        !           272:            while(readdir(dirp))
        !           273:                i++;
        !           274:            closedir(dirp);
        !           275:            stat(filename,&stbuf);
        !           276:            Systems[sys].lastodir=stbuf.st_mtime;
        !           277:        }
        !           278:        else {
        !           279:            fprintf(stderr,"Can't open %s \n",filename);
        !           280:            exit(1);
        !           281:        }
        !           282:        if (i>=2)
        !           283:            i-=2;                       /* correct . and .. */
        !           284:        Systems[sys].out=i;
        !           285:     }
        !           286:     return 0;
        !           287: }
        !           288: 
        !           289: get_stat_for_system(int i)
        !           290: {
        !           291:     char fn[80];
        !           292:     struct sysInfo sys;
        !           293:     struct stat stbuf;
        !           294:     FILE *fp;
        !           295:     time_t wait;
        !           296: 
        !           297:     sys = Systems[i];
        !           298:     stat(sys.statfile,&stbuf);
        !           299:     if (stbuf.st_atime > sys.laststat) {
        !           300:        if ((fp=fopen(sys.statfile,"r"))!=NULL) {
        !           301:            fgets(fn,80,fp);
        !           302:            fclose(fp);
        !           303:            sscanf(fn,"%d %d %ld %d",
        !           304:                   &sys.status,
        !           305:                   &sys.num_retries,
        !           306:                   &sys.last,
        !           307:                   &wait);
        !           308:            sys.next=sys.last+wait;
        !           309:        }
        !           310:        else {
        !           311:            sys.status=0;
        !           312:            sys.num_retries=0;
        !           313:            sys.last=0;
        !           314:            sys.next=0;
        !           315:        }
        !           316:        stat(sys.statfile,&stbuf);
        !           317:        sys.laststat=stbuf.st_atime;
        !           318:     }
        !           319:     Systems[i] = sys;
        !           320:     return 0;
        !           321: }

unix.superglobalmegacorp.com

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