home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume4 / unaxcess / part2 / param.c < prev    next >
C/C++ Source or Header  |  1986-11-30  |  4KB  |  183 lines

  1. /*
  2.  * %W% %E% %U% ncoast!bsa %Z%
  3.  * %Z% Copyright (C) 1986 by Brandon S. Allbery, All Rights Reserved %Z%
  4.  */
  5.  
  6. #ifndef lint
  7. static char _SccsId[] = "%W% %E% %U% ncoast!bsa %Z%";
  8. static char _CopyRt[] = "%Z% Copyright (C) 1985 by Brandon S. Allbery %Z%";
  9. #endif  lint
  10.  
  11. #include "ua.h"
  12.  
  13. struct sys parms = {
  14.     "/usr/unaxcess",
  15.     1,
  16.     0,
  17.     "ua-edit",
  18.     "/bin/sh",
  19.     1,
  20.     "unaxcess",
  21.     30,
  22.     "sysop",
  23.     1,
  24.     0,
  25.     "",
  26.     "",
  27.     1,
  28.     3,
  29.     "trap '' 2; stty -echo; echo 'Begin sending your file.  End with a CONTROL-D.'; cat - > %s; stty echo",
  30.     "trap '' 2; cat %s",
  31.     "umodem -rb",
  32.     "umodem -sb",
  33.     "kermit -iwr",
  34.     "kermit -iws",
  35. };
  36.  
  37. #define NUM        0
  38. #define STR        1
  39. #define BOOL        2
  40.  
  41. struct rparm {
  42.     char *parmname;
  43.     char parmtype;
  44.     char *parmval;
  45. } sysparms[] = {
  46.     "readonly",    BOOL,    &parms.ua_roc,
  47.     "x-rated",    BOOL,    &parms.ua_xrc,
  48.     "editor",    STR,    parms.ua_edit,
  49.     "shell",    STR,    parms.ua_shell,
  50.     "read-env",    BOOL,    &parms.ua_env,
  51.     "bbs-user",    STR,    parms.ua_bbs,
  52.     "time-limit",    NUM,    &parms.ua_tlimit,
  53.     "sysop",    STR,    parms.ua_sysop,
  54.     "private-msgs",    BOOL,    &parms.ua_pm,
  55.     "logging",    BOOL,    &parms.ua_log,
  56.     "banner",    STR,    parms.ua_bnr,
  57.     "login-msg",    STR,    parms.ua_login,
  58.     "pauses",    NUM,    &parms.ua_hco,
  59.     "login-tries",    NUM,    &parms.ua_nla,
  60.     "ascii-upload",    STR,    parms.ua_auc,
  61.     "ascii-download",STR,    parms.ua_adc,
  62.     "xmodem-upload",STR,    parms.ua_xuc,
  63.     "xmodem-download",STR,    parms.ua_xdc,
  64.     "kermit-upload",STR,    parms.ua_kuc,
  65.     "kermit-download",STR,    parms.ua_kdc,
  66.     0,        0,    0,
  67. };
  68.  
  69. /*
  70.  * 1. Get home directory
  71.  * 2. Open $HOME/uaconfig
  72.  * 3. Parse lines; # is a comment, input form is KEYWORD VALUE
  73.  *    VALUE is numeric, Y/N, "string" and backslash escapes for
  74.  *     \n \t \r \b \f \e \nnn are understood
  75.  * 4. Assign the values to the parms structure
  76.  */
  77.  
  78. static char line[512], var[20], sval[50];
  79.  
  80. getparms() {
  81.      char home[512];
  82.      FILE *cfp;
  83.      short nval, cnt, pos, scnt, canon;
  84.      
  85. #ifdef JPNHACK
  86.      strcpy(home, "/c/jpn/ua");
  87. #else
  88.      strcpy(home, getpwuid(geteuid())->pw_dir);
  89. #endif
  90.      strcpy(parms.ua_home, home);
  91.      strcpy(line, home);
  92.      strcat(line, "/");
  93.      strcat(line, CONFIG);
  94.      if ((cfp = fopen(line, "r")) == NULL) {
  95.          fprintf(stderr, "panic: param get, %s\n", line);
  96.          exit(1);
  97.      }
  98.      while (fgets(line, 512, cfp) != NULL) {
  99.          line[strlen(line) - 1] = '\0';
  100.          if (Index(line, '#') != NULL)
  101.              *(Index(line, '#')) = '\0';
  102.          scnt = 0;
  103.          pos = 0;
  104.          while (line[pos] != '\0' && line[pos] != ' ' && line[pos] != '\t')
  105.              var[scnt++] = line[pos++];
  106.          var[scnt] = '\0';
  107.          if (var[0] == '\0')
  108.              continue;
  109.          for (cnt = 0; sysparms[cnt].parmname != NULL; cnt++)
  110.              if (strcmp(sysparms[cnt].parmname, var) == 0)
  111.                  break;
  112.          if (sysparms[cnt].parmname == NULL) {
  113.              fprintf(stderr, "Please inform the sysop that there is an invalid parameter\nin the setup file.\n");
  114.              continue;
  115.          }
  116.         while (line[pos] == ' ' || line[pos] == '\t')
  117.             pos++;
  118.          switch (sysparms[cnt].parmtype) {
  119.              case NUM:
  120.                  *((char *) sysparms[cnt].parmval) = atoi(&line[pos]) & 0xff;
  121.                  break;
  122.              case BOOL:
  123.                  if (line[pos] == '\0' || ToLower(line[pos]) == 'y')
  124.                      *((char *) sysparms[cnt].parmval) = 1;
  125.                  else
  126.                      *((char *) sysparms[cnt].parmval) = 0;
  127.                  break;
  128.              case STR:
  129.                  if (line[pos] == '"') {
  130.                      canon = 1;
  131.                      pos++;
  132.                  }
  133.                  for (scnt = 0; (canon? line[pos] != '"': line[pos] != '\0' && line[pos] != ' ' && line[pos] != '\t'); pos++, scnt++) {    
  134.                      if (canon && line[pos] == '\\') {
  135.                          switch (line[++pos]) {    
  136.                              case 'n':
  137.                                  sval[scnt] = '\n';
  138.                                  break;
  139.                              case 't':
  140.                                  sval[scnt] = '\t';
  141.                                  break;
  142.                              case 'r':
  143.                                  sval[scnt] = '\r';
  144.                                  break;
  145.                              case 'b':
  146.                                  sval[scnt] = '\b';
  147.                                  break;
  148.                              case 'f':
  149.                                  sval[scnt] = '\f';
  150.                                  break;
  151.                              case 'e':
  152.                              case 'E':
  153.                                  sval[scnt] = '\033';
  154.                                  break;
  155.                              case 'a':
  156.                                  sval[scnt] = '\7';    /* proposed extension of C string metasyntax */
  157.                                  break;
  158.                              case '0':
  159.                              case '1':
  160.                              case '2':
  161.                              case '3':
  162.                              case '4':
  163.                              case '5':
  164.                              case '6':
  165.                              case '7':
  166.                                  sval[scnt] = 0;
  167.                                  while (Index("01234567", line[pos]) != NULL)
  168.                                      sval[scnt] = sval[scnt] * 8 + (line[pos++] - '0');
  169.                                 pos--;
  170.                                 break;
  171.                             default:
  172.                                 sval[scnt] = line[pos];
  173.                          }
  174.                      }
  175.                      else
  176.                          sval[scnt] = line[pos];
  177.                  }
  178.                  sval[scnt] = '\0';
  179.                  strcpy(sysparms[cnt].parmval, sval);
  180.          }
  181.      }
  182. }
  183.