home *** CD-ROM | disk | FTP | other *** search
/ Rat's Nest 1 / ratsnest1.iso / prgmming / c / loadcnf.c < prev    next >
Text File  |  1995-05-19  |  5KB  |  137 lines

  1.  
  2. /**************************************************************************
  3.                                                                           *
  4.  Function: LoadConfig.                                                    *
  5.   Purpose: Loads VBoard config for given node.                            *
  6.   Returns: Nothing, exits program if fails.                               *
  7.     Notes: You must have global variables GConfig and NConfig.            */
  8.  
  9. void LoadConfig(unsigned short NodeNum)
  10. {
  11.   unsigned char  GConfName[80];
  12.   unsigned char  NConfName[80];
  13.   unsigned char  Directory[40];
  14.   unsigned char  Temp[10];
  15.   unsigned char *EnvP;
  16.   unsigned short ConfigRev;
  17.     signed int   Handle;
  18.  
  19.   if (access("VBOARD.CFG", FALSE)) {
  20.     if ((EnvP=getenv("VBOARD"))!=NULL) {
  21.       strcpy(Directory, EnvP);
  22.       strcat(Directory, "\\");
  23.     } else {
  24.       puts("No configuration file and no VBoard environment value.");
  25.       exit(EXIT_BADCONFIG);
  26.     }
  27.   } else *Directory='\0';
  28.  
  29.   sprintf(GConfName, "%sVBOARD.CFG", Directory);
  30.   sprintf(NConfName, "%sNODE-%03X.CFG", Directory, NodeNum);
  31.  
  32.   if ((Handle=sopen(GConfName, O_RDONLY | O_BINARY, SH_DENYNONE))==-1) {
  33.     puts("Can't open global config!");
  34.     exit(EXIT_BADCONFIG);
  35.   }
  36.  
  37.   read(Handle, Temp, 8);
  38.   if (strncmp(Temp, "VBoard\n\r", 8)) {
  39.     puts("Invalid global configuration file!");
  40.     close(Handle);
  41.     exit(EXIT_BADCONFIG);
  42.   }
  43.  
  44.   read(Handle, &ConfigRev, sizeof(unsigned short));
  45.   if (ConfigRev!=CONFIGREV) {
  46.     printf("Wrong configuration revision %u. Revision %u required!\n", ConfigRev, CONFIGREV);
  47.     printf(ConfigRev<CONFIGREV ?
  48.            "Too old version. Get a recent one.\n" :
  49.            "Too new version. Please update configuration.\n");
  50.     close(Handle);
  51.     exit(EXIT_BADCONFIG);
  52.   }
  53.  
  54.   read(Handle, &GConfig, sizeof(GConfig));
  55.   close(Handle);
  56.  
  57.   if ((Handle=sopen(NConfName, O_RDONLY | O_BINARY, SH_DENYNONE))==-1) {
  58.     puts("Can't open node config!");
  59.     exit(EXIT_BADCONFIG);
  60.   }
  61.   read(Handle, Temp, 8);
  62.   if (strncmp(Temp, "VBoard\n\r", 8)) {
  63.     puts("Invalid global configuration file!");
  64.     close(Handle);
  65.     exit(EXIT_BADCONFIG);
  66.   }
  67.  
  68.   read(Handle, &ConfigRev, sizeof(unsigned short));
  69.   if (ConfigRev!=CONFIGREV) {
  70.     printf("Wrong configuration revision %u. Revision %u required!\n", ConfigRev, CONFIGREV);
  71.     close(Handle);
  72.     exit(EXIT_BADCONFIG);
  73.   }
  74.  
  75.   read(Handle, &NConfig, sizeof(NConfig));
  76.   close(Handle);
  77.   return;
  78. }
  79.  
  80.  
  81. #ifndef NODETECTCONFS
  82. /**************************************************************************
  83.                                                                           *
  84.  Function: DetectConfs.                                                   *
  85.   Purpose: Detects critical conference numbers from confinfo.dat.         *
  86.   Returns: FALSE if all OK, errorcode if not.                             *
  87.     Notes: You must have global variables for conference numbers.         */
  88.  
  89. unsigned char DetectConfs(void)
  90. {
  91.   unsigned char  FileName[128];
  92.     signed int   Handle;
  93.  
  94.   CONF DConf;
  95.  
  96.   if (NumberOfConfs) return 3; /* DO NOT CALL TWISE!! */
  97.  
  98.   /* Zero all akas before using them. */
  99.   #ifndef NO_AKA_STRUCT
  100.   memset(&AKA, FALSE, sizeof(AKA));
  101.   #endif
  102.  
  103.   strcpy(FileName, NConfig.MainDir);
  104.   strcat(FileName, "CONFINFO.DAT");
  105.   if ((Handle=sopen(FileName, O_BINARY | O_RDONLY, SH_DENYNONE))==-1) {
  106.     puts("Failed to detect conferences.");
  107.     puts(FileName);
  108.     return 1; /* Warn */
  109.   }
  110.  
  111.   while(read(Handle, &DConf, sizeof(CONF))==sizeof(CONF)) {
  112.     if (Conf_Post==CONF_NOT_PRESENT && DConf.PostConf && !DConf.NetArea) Conf_Post=NumberOfConfs;
  113.     if (Conf_NetMail==CONF_NOT_PRESENT && DConf.PostConf && DConf.NetArea) Conf_NetMail=NumberOfConfs;
  114.     if (Conf_Resume==CONF_NOT_PRESENT && DConf.ResumeConf) Conf_Resume=NumberOfConfs;
  115.     if (Conf_BadEcho==CONF_NOT_PRESENT && !strcmp(DConf.AreaTag, "BADECHO")) Conf_BadEcho=NumberOfConfs;
  116.  
  117.     /* Generate AKA-list */
  118.     #ifndef NO_AKA_STRUCT
  119.     if (DConf.NetArea && DConf.OwnZone) {
  120.       unsigned char i;
  121.       for (i=0;i<MAX_AKA;++i) {
  122.         if (AKA[i].OwnZone==DConf.OwnZone) break;
  123.         if (AKA[i].OwnZone==FALSE) {
  124.           AKA[i].OwnZone=DConf.OwnZone; AKA[i].HubZone=DConf.HubZone;
  125.           AKA[i].OwnNet=DConf.OwnNet;   AKA[i].HubNet=DConf.HubNet;
  126.           AKA[i].OwnNode=DConf.OwnNode; AKA[i].HubNode=DConf.HubNode;
  127.           break;
  128.         }
  129.       }
  130.     }
  131.     #endif
  132.     ++NumberOfConfs;
  133.   } close(Handle);
  134.   return (Conf_Post!=CONF_NOT_PRESENT) ? FALSE: 2; /* No post conf.. FAIL!!! */
  135. }
  136. #endif
  137.