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