1 # include "../hdr/defines.h"
2
3 static char Sccsid[] = "@(#)setup.c 1.3 02/15/87";
4
setup(pkt,serial)5 setup(pkt,serial)
6 register struct packet *pkt;
7 int serial;
8 {
9 register int n;
10 register struct apply *rap;
11 int first_app = 1;
12
13 pkt->p_apply[serial].a_inline = 1;
14 for (n = maxser(pkt); n; n--) {
15 rap = &pkt->p_apply[n];
16 if (rap->a_inline) {
17 if (n != 1 && pkt->p_idel[n].i_pred == 0)
18 fmterr(pkt);
19 pkt->p_apply[pkt->p_idel[n].i_pred].a_inline = 1;
20 if (pkt->p_idel[n].i_datetime > pkt->p_cutoff)
21 condset(rap,NOAPPLY,CUTOFF);
22 else {
23 if (first_app)
24 bcopy(&pkt->p_idel[n].i_sid,
25 &pkt->p_gotsid,
26 sizeof(pkt->p_gotsid));
27 first_app = 0;
28 condset(rap,APPLY,EMPTY);
29 }
30 }
31 else
32 condset(rap,NOAPPLY,EMPTY);
33 if (rap->a_code == APPLY)
34 ixgsetup(pkt->p_apply,&(pkt->p_idel[n].i_ixg));
35 }
36 }
37
38
39 ixgsetup(ap,ixgp)
40 struct apply *ap;
41 struct ixg *ixgp;
42 {
43 int n;
44 int code, reason;
45 register int *ip;
46 register struct ixg *cur, *prev;
47
48 for (cur = ixgp; cur = (prev = cur)->i_next; ) {
49 switch (cur->i_type) {
50
51 case INCLUDE:
52 code = APPLY;
53 reason = INCL;
54 break;
55 case EXCLUDE:
56 code = NOAPPLY;
57 reason = EXCL;
58 break;
59 case IGNORE:
60 code = EMPTY;
61 reason = IGNR;
62 break;
63 }
64 ip = cur->i_ser;
65 for (n = cur->i_cnt; n; n--)
66 condset(&ap[*ip++],code,reason);
67 }
68 }
69
70
condset(ap,code,reason)71 condset(ap,code,reason)
72 register struct apply *ap;
73 int code, reason;
74 {
75 if (code == EMPTY)
76 ap->a_reason |= reason;
77 else if (ap->a_code == EMPTY) {
78 ap->a_code = code;
79 ap->a_reason |= reason;
80 }
81 }
82