xref: /original-bsd/usr.sbin/sendmail/src/trace.c (revision 1403a0cd)
1 # include <ctype.h>
2 # include "sendmail.h"
3 
4 SCCSID(@(#)trace.c	4.1		07/25/83);
5 
6 /*
7 **  TtSETUP -- set up for trace package.
8 **
9 **	Parameters:
10 **		vect -- pointer to trace vector.
11 **		size -- number of flags in trace vector.
12 **		defflags -- flags to set if no value given.
13 **
14 **	Returns:
15 **		none
16 **
17 **	Side Effects:
18 **		environment is set up.
19 */
20 
21 u_char		*tTvect;
22 int		tTsize;
23 static char	*DefFlags;
24 
25 tTsetup(vect, size, defflags)
26 	u_char *vect;
27 	int size;
28 	char *defflags;
29 {
30 	tTvect = vect;
31 	tTsize = size;
32 	DefFlags = defflags;
33 }
34 /*
35 **  TtFLAG -- process an external trace flag description.
36 **
37 **	Parameters:
38 **		s -- the trace flag.
39 **
40 **	Returns:
41 **		none.
42 **
43 **	Side Effects:
44 **		sets/clears trace flags.
45 */
46 
47 tTflag(s)
48 	register char *s;
49 {
50 	int first, last;
51 	register int i;
52 
53 	if (*s == '\0')
54 		s = DefFlags;
55 
56 	for (;;)
57 	{
58 		/* find first flag to set */
59 		i = 0;
60 		while (isdigit(*s))
61 			i = i * 10 + (*s++ - '0');
62 		first = i;
63 
64 		/* find last flag to set */
65 		if (*s == '-')
66 		{
67 			i = 0;
68 			while (isdigit(*++s))
69 				i = i * 10 + (*s - '0');
70 		}
71 		last = i;
72 
73 		/* find the level to set it to */
74 		i = 1;
75 		if (*s == '.')
76 		{
77 			i = 0;
78 			while (isdigit(*++s))
79 				i = i * 10 + (*s - '0');
80 		}
81 
82 		/* clean up args */
83 		if (first >= tTsize)
84 			first = tTsize - 1;
85 		if (last >= tTsize)
86 			last = tTsize - 1;
87 
88 		/* set the flags */
89 		while (first <= last)
90 			tTvect[first++] = i;
91 
92 		/* more arguments? */
93 		if (*s++ == '\0')
94 			return;
95 	}
96 }
97