1 #ident "$Id: vel_chain.c,v 1.1 2002/04/26 09:51:07 ludo Exp $"
2 #include <stdio.h>
3 #include <mut.h>
4 #include <mlo.h>
5 #include <mlu.h>
6 #include "vel_velo.h"
7
debugChain(lofig_list * f)8 void debugChain(lofig_list *f)
9 {
10 ptype_list *p;
11 velosig *vs;
12 velocon *vc;
13 chain_list *ch;
14
15 p=getptype(f->USER, VEL_SIG);
16 for (vs=(velosig *)p->DATA; vs; vs=vs->NEXT) {
17 printf("+-%s[%ld:%ld]\n", vs->NAME, vs->LEFT, vs->RIGHT);
18 if (vs->TYPE=='M')
19 printf(" <%s[%ld:%ld]>\n", vs->SUPER->NAME,
20 vs->SUPER->LEFT, vs->SUPER->RIGHT);
21 p=getptype(vs->USER, VEL_CHAIN);
22 for (ch=(chain_list *)p->DATA; ch; ch=ch->NEXT) {
23 vc=(velocon *)ch->DATA;
24 printf(" *-%s[%ld:%ld]\n", vc->NAME, vc->LEFT, vc->RIGHT);
25 }
26 }
27 }
28
velofigChain(lofig_list * f)29 void velofigChain(lofig_list *f)
30 {
31 velocon *vc;
32 velosig *vs;
33 ptype_list *p;
34 loins_list *i;
35 chain_list *c;
36
37 p=getptype(f->USER, VEL_SIG);
38 if (!p) {
39 fprintf(stderr, "No velosig found!");
40 }
41 for (vs=(velosig *)p->DATA; vs; vs=vs->NEXT) {
42 p=getptype(vs->USER, VEL_CHAIN);
43 if (p != NULL) {
44 freechain((chain_list *)p->DATA);
45 p->DATA=NULL;
46 } else
47 vs->USER=addptype(vs->USER, VEL_CHAIN, NULL);
48 }
49
50 p=getptype(f->USER, VEL_CON);
51 if (p!=NULL) {
52 for (vc=(velocon *)p->DATA; vc; vc=vc->NEXT) {
53 for (c=vc->VSIG; c; c=c->NEXT) {
54 vs=(velosig *)c->DATA;
55 p=getptype(vs->USER, VEL_CHAIN);
56 p->DATA=addchain(p->DATA, vc);
57 if (vs->TYPE=='M') {
58 p=getptype(vs->SUPER->USER, VEL_CHAIN);
59 p->DATA=addchain(p->DATA, vc);
60 }
61 }
62 }
63 }
64 for (i=f->LOINS; i; i=i->NEXT) {
65 p=getptype(i->USER, VEL_CON);
66 if (p!=NULL) {
67 for (vc=(velocon *)p->DATA; vc; vc=vc->NEXT) {
68 for (c=vc->VSIG; c; c=c->NEXT) {
69 vs=(velosig *)c->DATA;
70 p=getptype(vs->USER, VEL_CHAIN);
71 p->DATA=addchain(p->DATA, vc);
72 if (vs->TYPE=='M') {
73 p=getptype(vs->SUPER->USER, VEL_CHAIN);
74 p->DATA=addchain(p->DATA, vc);
75 }
76 }
77 }
78 }
79 }
80
81 if (getenv("VEL_DEBUG"))
82 debugChain(f);
83 }
84
85