Research V7 development
[unix-history] / usr / src / cmd / struct / 0.args.c
CommitLineData
2a70a0a1
BB
1#include <stdio.h>
2#
3#include "def.h"
4int errflag;
5FILE *infd;
6
7
8int intcase=1, arbcase=0;
9int exitsize=0; /* max number of nodes to be left in loop without iterating */
10int maxnode=400; /* max number of nodes */
11int maxhash=347; /* prime number = size of hash table */
12int progress=0; /* if not 0, print line number every n lines, n = progress */
13int labinit=10; /* labels generated starting with labinit */
14int labinc=10; /* labels increase by labinc */
15int inputform=0; /* = 0 if freeform input, 1 if standard form input */
16int debug=0;
17int levbrk=1; /* true implies multilevel breaks; false implies single-level breaks only */
18int levnxt=1; /* true implies multilevel nexts; false implies single-level nexts only */
19
20
21int maxprogsw=12; /* number of program switches which can be set */
22char *progsw[] = {"i", "a",
23 "e", "m",
24 "h", "p",
25 "t", "c",
26 "s", "d",
27 "b", "n"
28 };
29
30
31int *swval[] = {&intcase, &arbcase,
32 &exitsize, &maxnode,
33 &maxhash, &progress,
34 &labinit, &labinc,
35 &inputform, &debug,
36 &levbrk, &levnxt
37 };
38
39
40char *getargs(argc, argv)
41int 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
67setsw(str)
68char *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 }