home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / OFFLINE / UQWK18.ZIP / UQWK18.TAR / options.c < prev    next >
C/C++ Source or Header  |  1994-01-24  |  8KB  |  363 lines

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <pwd.h>
  4. #include <string.h>
  5. #include "uqwk.h"
  6.  
  7. /*
  8.  *  Determine runtime options
  9.  */
  10.  
  11. DefaultOptions()
  12. /*
  13.  *  Set up default options
  14.  */
  15. {
  16.     struct passwd *pw;
  17.  
  18.     /* Do user-specific stuff*/
  19.     if (NULL == (pw = getpwuid(getuid())))
  20.     {
  21.         fprintf (stderr, "%s: warning: you don't exist\n", progname);
  22.         strcpy (user_name, DEF_USER_NAME);
  23.         strcpy (home_dir, DEF_HOME_DIR);
  24.     }
  25.     else
  26.     {
  27.         strcpy (user_name, pw->pw_name);
  28.         strcpy (home_dir, pw->pw_dir);
  29.     }
  30.  
  31.     /* Dinky misc options */
  32.     do_mail = DEF_DO_MAIL;
  33.     do_news = DEF_DO_NEWS;
  34.     inc_hdrs = DEF_INC_HDRS;
  35.     prt_opts = DEF_PRT_OPTS;
  36.     read_only = DEF_READ_ONLY;
  37.     max_blks = DEF_MAX_BLKS;
  38.     grp_len = DEF_GRP_LEN;
  39.     waf_mode = DEF_WAF_MODE;
  40.     slnp_mode = DEF_SLNP_MODE;
  41.     zip_mode = DEF_ZIP_MODE;
  42.     xrf_mode = DEF_XRF_MODE;
  43.     bw_kludge = DEF_BW_KLUDGE;
  44.     xprt_mode = DEF_XPRT_MODE;
  45.     sum_mode = DEF_SUM_MODE;
  46.     sel_mode = DEF_SEL_MODE;
  47.     every_mode = DEF_EVERY_MODE;
  48.  
  49.     strcpy (mail_dir, DEF_MAIL_DIR);
  50.     strcpy (mail_file, DEF_MAIL_FILE);
  51.     strcpy (act_file, DEF_ACT_FILE);
  52.     strcpy (nrc_file, DEF_NRC_FILE);
  53.     strcpy (news_dir, DEF_NEWS_DIR);
  54.  
  55.     strcpy (bbs_name, DEF_BBS_NAME);
  56.     strcpy (bbs_city, DEF_BBS_CITY);
  57.     strcpy (bbs_phone, DEF_BBS_PHONE);
  58.     strcpy (bbs_sysop, DEF_BBS_SYSOP);
  59.     strcpy (bbs_id, DEF_BBS_ID);
  60.     strcpy (rep_file, DEF_REP_FILE);
  61.     strcpy (trn_file, DEF_TRN_FILE);
  62.     strcpy (host_name, DEF_HOST_NAME);
  63.     strcpy (sum_file, DEF_SUM_FILE);
  64.     strcpy (sel_file, DEF_SEL_FILE);
  65.     strcpy (ng_file, DEF_NG_FILE);
  66. }
  67.  
  68. EnvOptions()
  69. /*
  70.  *  Override options from environment variables
  71.  */
  72. {
  73.     char *c;
  74.  
  75.     if (NULL != (c = getenv ("UQ_DO_MAIL"))) do_mail = atoi (c);
  76.     if (NULL != (c = getenv ("UQ_DO_NEWS"))) do_news = atoi (c);
  77.     if (NULL != (c = getenv ("UQ_INC_HDRS"))) inc_hdrs = atoi (c);
  78.     if (NULL != (c = getenv ("UQ_PRT_OPTS"))) prt_opts = atoi (c);
  79.     if (NULL != (c = getenv ("UQ_READ_ONLY"))) read_only = atoi (c);
  80.     if (NULL != (c = getenv ("UQ_MAX_BLKS"))) max_blks = atoi (c);
  81.     if (NULL != (c = getenv ("UQ_GRP_LEN"))) grp_len = atoi (c);
  82.     if (NULL != (c = getenv ("UQ_WAF_MODE"))) waf_mode = atoi (c);
  83.     if (NULL != (c = getenv ("UQ_SOUP_MODE"))) slnp_mode = atoi (c);
  84.     if (NULL != (c = getenv ("UQ_ZIP_MODE"))) zip_mode = atoi (c);
  85.     if (NULL != (c = getenv ("UQ_XRF_MODE"))) xrf_mode = atoi (c);
  86.     if (NULL != (c = getenv ("UQ_BW_KLUDGE"))) bw_kludge = atoi (c);
  87.     if (NULL != (c = getenv ("UQ_XPRT_MODE"))) xprt_mode = atoi (c);
  88.     if (NULL != (c = getenv ("UQ_EVERY_MODE"))) every_mode = atoi (c);
  89.  
  90.     if (NULL != (c = getenv ("UQ_HOME_DIR"))) strcpy (home_dir, c);
  91.     if (NULL != (c = getenv ("UQ_MAIL_FILE"))) strcpy (mail_file, c);
  92.     if (NULL != (c = getenv ("UQ_MAIL_DIR"))) strcpy (mail_dir, c);
  93.     if (NULL != (c = getenv ("UQ_USER_NAME"))) strcpy (user_name, c);
  94.     if (NULL != (c = getenv ("UQ_NEWS_DIR"))) strcpy (news_dir, c);
  95.  
  96.     if (NULL != (c = getenv ("UQ_BBS_NAME"))) strcpy (bbs_name, c);
  97.     if (NULL != (c = getenv ("UQ_BBS_CITY"))) strcpy (bbs_city, c);
  98.     if (NULL != (c = getenv ("UQ_BBS_PHONE"))) strcpy (bbs_phone, c);
  99.     if (NULL != (c = getenv ("UQ_BBS_SYSOP"))) strcpy (bbs_sysop, c);
  100.     if (NULL != (c = getenv ("UQ_BBS_ID"))) strcpy (bbs_id, c);
  101.  
  102.     if (NULL != (c = getenv ("UQ_ACT_FILE"))) strcpy (act_file, c);
  103.     if (NULL != (c = getenv ("UQ_NRC_FILE"))) strcpy (nrc_file, c);
  104.  
  105.     if (NULL != (c = getenv ("UQ_REP_FILE"))) strcpy (rep_file, c);
  106.     if (NULL != (c = getenv ("UQ_TRN_FILE"))) strcpy (trn_file, c);
  107.     if (NULL != (c = getenv ("UQ_HOST_NAME"))) strcpy (host_name, c);
  108.     if (NULL != (c = getenv ("UQ_NG_FILE"))) strcpy (ng_file, c);
  109.  
  110.     if (NULL != (c = getenv ("UQ_SUM_FILE")))
  111.     {
  112.         strcpy (sum_file, c);
  113.         sum_mode = 1;
  114.     }
  115.     if (NULL != (c = getenv ("UQ_SEL_FILE")))
  116.     {
  117.         strcpy (sel_file, c);
  118.         sel_mode = 1;
  119.     }
  120. }
  121.  
  122. CommandOptions (argc, argv)
  123. int argc;
  124. char *argv[];
  125. /*
  126.  *  Override options from command line
  127.  */
  128. {
  129.     int i;
  130.  
  131.     for (i=1; i<argc; i++)
  132.     {
  133.         switch (argv[i][0])
  134.         {
  135.         case '+':
  136.             switch (argv[i][1])
  137.             {
  138.             case 'm':    do_mail = 1;
  139.                     break;
  140.  
  141.             case 'n':    do_news = 1;
  142.                     break;
  143.  
  144.             case 'h':    inc_hdrs = 1;
  145.                     break;
  146.  
  147.             case 'r':    read_only = 1;
  148.                     break;
  149.  
  150.             case 'w':    waf_mode = 1;
  151.                     break;
  152.  
  153.             case 'L':    slnp_mode = 1;
  154.                     break;
  155.  
  156.             case 'z':    zip_mode = 1;
  157.                     break;
  158.  
  159.             case 'x':    xrf_mode = 1;
  160.                     break;
  161.  
  162.             case 'W':    bw_kludge = 1;
  163.                     break;
  164.  
  165.             case 'X':    xprt_mode = 1;
  166.                     break;
  167.  
  168.             case 'e':    every_mode = 1;
  169.                     break;
  170.  
  171.             default:    BadFlag (argv[i]);
  172.                     break;
  173.             }
  174.             break;
  175.  
  176.         case '-':
  177.             switch (argv[i][1])
  178.             {
  179.             case 'm':    do_mail = 0;
  180.                     break;
  181.  
  182.             case 'n':    do_news = 0;
  183.                     break;
  184.  
  185.             case 'h':    inc_hdrs = 0;
  186.                     break;
  187.  
  188.             case 'r':    read_only = 0;
  189.                     break;
  190.  
  191.             case 'w':    waf_mode = 0;
  192.                     break;
  193.  
  194.             case 'p':    prt_opts = 1;
  195.                     break;
  196.  
  197.             case 'L':    slnp_mode = 0;
  198.                     break;
  199.  
  200.             case 'z':    zip_mode = 0;
  201.                     break;
  202.  
  203.             case 'x':    xrf_mode = 0;
  204.                     break;
  205.  
  206.             case 'W':    bw_kludge = 0;
  207.                     break;
  208.  
  209.             case 'X':    xprt_mode = 0;
  210.                     break;
  211.  
  212.             case 'e':    every_mode = 0;
  213.                     break;
  214.  
  215.             case 'M':    strcpy (mail_dir, &argv[i][2]);
  216.                     break;
  217.  
  218.             case 'f':    strcpy (mail_file, &argv[i][2]);
  219.                     break;
  220.  
  221.             case 'u':    strcpy (user_name, &argv[i][2]);
  222.                     break;
  223.  
  224.             case 'H':    strcpy (home_dir, &argv[i][2]);
  225.                     break;
  226.  
  227.             case 'b':    strcpy (bbs_name, &argv[i][2]);
  228.                     break;
  229.  
  230.             case 'c':    strcpy (bbs_city, &argv[i][2]);
  231.                     break;
  232.  
  233.             case 'P':    strcpy (bbs_phone, &argv[i][2]);
  234.                     break;
  235.  
  236.             case 's':    strcpy (bbs_sysop, &argv[i][2]);
  237.                     break;
  238.  
  239.             case 'i':    strcpy (bbs_id, &argv[i][2]);
  240.                     break;
  241.  
  242.             case 'a':    strcpy (act_file, &argv[i][2]);
  243.                     break;
  244.  
  245.             case 'N':    strcpy (nrc_file, &argv[i][2]);
  246.                     break;
  247.  
  248.             case 'S':    strcpy (news_dir, &argv[i][2]);
  249.                     break;
  250.  
  251.             case 'B':    max_blks = atoi (&argv[i][2]);
  252.                     break;
  253.  
  254.             case 'R':    strcpy (rep_file, &argv[i][2]);
  255.                     break;
  256.  
  257.             case 'l':    grp_len = atoi (&argv[i][2]);
  258.                     break;
  259.  
  260.             case 't':    strcpy (trn_file, &argv[i][2]);
  261.                     break;
  262.  
  263.             case 'd':    strcpy (host_name, &argv[i][2]);
  264.                     break;
  265.  
  266.             case 'U':    strcpy (sum_file, &argv[i][2]);
  267.                     sum_mode = 1;
  268.                     break;
  269.  
  270.             case 'E':    strcpy (sel_file, &argv[i][2]);
  271.                     sel_mode = 1;
  272.                     break;
  273.  
  274.             case 'D':    strcpy (ng_file, &argv[i][2]);
  275.                     break;
  276.  
  277.             default:    BadFlag (argv[i]);
  278.                     break;
  279.             }
  280.             break;
  281.  
  282.         default:
  283.             BadFlag (argv[i]);
  284.             break;
  285.         }
  286.     }
  287.  
  288.     /* If mail file has not been overridden, set it */
  289.     if (!strcmp (mail_file, DEF_MAIL_FILE))
  290.     {
  291.         strcpy (mail_file, mail_dir);
  292.         strcat (mail_file, "/");
  293.         strcat (mail_file, user_name);
  294.     }
  295.  
  296.     /* If .newsrc file has not been overridden, set it */
  297.     if (!strcmp (nrc_file, DEF_NRC_FILE))
  298.     {
  299.         strcpy (nrc_file, home_dir);
  300.         strcat (nrc_file, "/.newsrc");
  301.     }
  302.  
  303.     /* Some sanity checks */
  304.  
  305.     /* Summary or selection mode implies do news */
  306.     if (sum_mode || sel_mode) do_news = 1;
  307.  
  308.     /* Summary mode implies no mail */
  309.     if (sum_mode) do_mail = 0;
  310.  
  311.     /* Summary mode implies no special packet format */
  312.     if (sum_mode) zip_mode = slnp_mode = 0;
  313.  
  314.     if (prt_opts)
  315.     {
  316.         PrintOptions();
  317.         exit (0);
  318.     }
  319. }
  320.  
  321. BadFlag (c)
  322. char *c;
  323. {
  324.     fprintf (stderr, "%s: bad flag: %s\n", progname, c);
  325.     exit (0);
  326. }
  327.  
  328. PrintOptions ()
  329. {
  330.     printf ("Version: %s\n", UQWK_VERSION);
  331.     printf ("Do mail: %d\n", do_mail);
  332.     printf ("Do news: %d\n", do_news);
  333.     printf ("Include headers: %d\n", inc_hdrs);
  334.     printf ("Read only: %d\n", read_only);
  335.     printf ("Maximum blocks: %d\n", max_blks);
  336.     printf ("Group name limit: %d\n", grp_len);
  337.     printf ("Waffle mode: %d\n", waf_mode);
  338.     printf ("SOUP mode: %d\n", slnp_mode);
  339.     printf ("ZipNews mode: %d\n", zip_mode);
  340.     printf ("Xref mode: %d\n", xrf_mode);
  341.     printf ("Blue Wave kludge: %d\n", bw_kludge);
  342.     printf ("Expert mode: %d\n", xprt_mode);
  343.     printf ("Every group in CONTROL.DAT: %d\n", every_mode);
  344.     printf ("Mail directory: %s\n", mail_dir);
  345.     printf ("News directory: %s\n", news_dir);
  346.     printf ("Mail file: %s\n", mail_file);
  347.     printf ("User name: %s\n", user_name);
  348.     printf ("Home directory: %s\n", home_dir);
  349.     printf ("BBS name: %s\n", bbs_name);
  350.     printf ("BBS city: %s\n", bbs_city);
  351.     printf ("BBS phone: %s\n", bbs_phone);
  352.     printf ("BBS sysop: %s\n", bbs_sysop);
  353.     printf ("BBS id: %s\n", bbs_id);
  354.     printf ("Active file: %s\n", act_file);
  355.     printf (".newsrc file: %s\n", nrc_file);
  356.     printf ("Reply file: %s\n", rep_file);
  357.     printf ("Newsgroup name translation table: %s\n", trn_file);
  358.     printf ("Host name: %s\n", host_name);
  359.     printf ("Summary file: %s\n", sum_file);
  360.     printf ("Selection file: %s\n", sel_file);
  361.     printf ("Desired newsgroups file: %s\n", ng_file);
  362. }
  363.