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