home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / uucp / systat.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-15  |  2.2 KB  |  132 lines

  1. #include "uucp.h"
  2. #include <sys/types.h>
  3.  
  4. #define STATNAME(f, n) sprintf(f, "%s/%s.%.7s", Spool, "STST", n)
  5. #define S_SIZE 100
  6.  
  7. /*******
  8.  *    systat(name, type, text)    make system status entry
  9.  *    char *name, *text;
  10.  *    int type.
  11.  *
  12.  *    return codes:  none
  13.  */
  14.  
  15. systat(name, type, text)
  16. char *name, *text;
  17. int type;
  18. {
  19.     char filename[MAXFULLNAME], line[S_SIZE];
  20.     int count;
  21.     FILE *fp;
  22.     time_t prestime;
  23.  
  24.     if (type == 0)
  25.         return;
  26.     line[0] = '\0';
  27.     time(&prestime);
  28.     count = 0;
  29.     STATNAME(filename, name);
  30.  
  31.     fp = fopen(filename, "r");
  32.     if (fp != NULL) {
  33.         fgets(line, S_SIZE, fp);
  34.         sscanf(&line[2], "%d", &count);
  35.         if (count <= 0)
  36.             count = 0;
  37.         fclose(fp);
  38.     }
  39.  
  40.     if (type == SS_FAIL)
  41.         count++;
  42.  
  43.     fp = fopen(filename, "w");
  44.     ASSERT(fp != NULL, "SYSTAT OPEN FAIL %s", "");
  45.     chmod(filename, 0666);
  46.     fprintf(fp, "%d %d %D %s %s\n", type, count, prestime, text, name);
  47.     fclose(fp);
  48.     return;
  49. }
  50.  
  51. /***
  52.  *    rmstat(name)    remove system status entry
  53.  *    char *name;
  54.  *
  55.  *    return codes:  none
  56.  */
  57.  
  58. rmstat(name)
  59. char *name;
  60. {
  61.     char filename[MAXFULLNAME];
  62.  
  63.     STATNAME(filename, name);
  64.     unlink(filename);
  65. }
  66.  
  67. /***
  68.  *    callok(name)    check system status for call
  69.  *    char *name;
  70.  *
  71.  *    return codes  0 - ok | >0 system status
  72.  */
  73.  
  74. callok(name)
  75. char *name;
  76. {
  77.     char filename[MAXFULLNAME], line[S_SIZE];
  78.     FILE *fp;
  79.     time_t lasttime, prestime;
  80.     int count, type;
  81.  
  82.     STATNAME(filename, name);
  83.     fp = fopen(filename, "r");
  84.     if (fp == NULL)
  85.         return(SS_OK);
  86.  
  87.     if (fgets(line, S_SIZE, fp) == NULL) {
  88.         /*  no data  */
  89.         fclose(fp);
  90.         unlink(filename);
  91.         return(SS_OK);
  92.     }
  93.  
  94.     fclose(fp);
  95.     time(&prestime);
  96.     sscanf(line, "%d%d%D", &type, &count, &lasttime);
  97.  
  98.     switch(type) {
  99.     case SS_BADSEQ:
  100.     case SS_CALLBACK:
  101.         return(SS_OK);
  102.     case SS_NODEVICE:
  103.         return(SS_OK);
  104.  
  105.     case SS_INPROGRESS:
  106.         if (prestime - lasttime < INPROGTIME) {
  107.             DEBUG(4, "CALL IN PROGRESS %s\n", "");
  108.             return(type);
  109.         }
  110.         else
  111.             return(SS_OK);
  112.  
  113.  
  114.     case SS_FAIL:
  115.         if (count > MAXRECALLS) {
  116.             logent("MAX RECALLS", "NO CALL");
  117.             DEBUG(4, "MAX RECALL COUNT %d\n", count);
  118.             return(type);
  119.         }
  120.  
  121.         if (prestime - lasttime < RETRYTIME) {
  122.             logent("RETRY TIME NOT REACHED", "NO CALL");
  123.             DEBUG(4, "RETRY TIME (%d) NOT REACHED\n", RETRYTIME);
  124.             return(type);
  125.         }
  126.  
  127.         return(SS_OK);
  128.     default:
  129.         return(SS_OK);
  130.     }
  131. }
  132.