home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / struct / 0.args.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  2.0 KB  |  99 lines

  1. #include <stdio.h>
  2. #
  3. #include "def.h"
  4. int errflag;
  5. FILE *infd;
  6.  
  7.  
  8. int intcase=1, arbcase=0;
  9. int exitsize=0;            /* max number of nodes to be left in loop without iterating */
  10. int maxnode=400;    /* max number of nodes */
  11. int maxhash=347;    /* prime number = size of hash table */
  12. int progress=0;        /* if not 0, print line number every n lines, n = progress */
  13. int labinit=10;            /* labels generated starting with labinit */
  14. int labinc=10;            /* labels increase by labinc */
  15. int inputform=0;        /* = 0 if freeform input, 1 if standard form input */
  16. int debug=0;
  17. int levbrk=1;    /* true implies multilevel breaks; false implies single-level breaks only */
  18. int levnxt=1;    /* true implies multilevel nexts; false implies single-level nexts only */
  19.  
  20.  
  21. int maxprogsw=12;        /* number of program switches which can be set */
  22. char *progsw[]        = {"i", "a",
  23.             "e", "m",
  24.             "h", "p",
  25.             "t", "c",
  26.             "s", "d",
  27.             "b", "n"
  28.             };
  29.  
  30.  
  31. int *swval[]        = {&intcase, &arbcase,
  32.             &exitsize, &maxnode,
  33.             &maxhash, &progress,
  34.             &labinit, &labinc,
  35.             &inputform, &debug,
  36.             &levbrk, &levnxt
  37.             };
  38.  
  39.  
  40. char *getargs(argc, argv)
  41. int argc; char *argv[];
  42.     {
  43.     int n, infile;
  44.     infile = 0;
  45.  
  46.     for (n = 1; n < argc; ++n)
  47.         {
  48.         if (argv[n][0] == '-')
  49.             setsw(&argv[n][1]);
  50.         else
  51.             {
  52.             if (infile != 0)
  53.                 error("multiple input files - using first one: ", argv[infile],"");
  54.             else
  55.                 infile = n;
  56.             }
  57.         }
  58.     if (errflag)
  59.         exit(1);
  60.     if (!infile) faterr("no input file","","");
  61.     infd = fopen(argv[infile],"r");
  62.     if (infd == NULL)
  63.         faterr("can't open input file:",argv[infile],"");
  64.     return;
  65.     }
  66.  
  67. setsw(str)
  68. char *str;
  69.     {
  70.     int i, val, swnum;
  71. #define maxtemp 15
  72.     char temp[maxtemp];
  73.     for (i = 0; 'a' <= str[i] && str[i] <= 'z'; ++i)
  74.         {
  75.         if (i >= maxtemp)
  76.             {
  77.             error("invalid switch:",str,"");
  78.             errflag = 1;
  79.             }
  80.         temp[i] = str[i];
  81.         }
  82.     temp[i] = '\0';
  83.  
  84.     swnum = find(temp,progsw,maxprogsw);
  85.     if (swnum == -1)
  86.         {
  87.         error("invalid switch:", str,"");
  88.         errflag = 1;
  89.         return;
  90.         }
  91.     if (str[i] == '\0')
  92.         *(swval[swnum]) = !*(swval[swnum]);
  93.     else
  94.         {
  95.         sscanf(&str[i],"%d",&val);
  96.         *(swval[swnum]) = val;
  97.         }
  98.     }
  99.