1 /****************************************************************************/
3 /* Chaine de CAO & VLSI Alliance */
5 /* Produit : YAGLE v3.50 */
6 /* Fichier : yag_utilbeh.c */
8 /* (c) copyright 1993 Laboratoire MASI equipe CAO & VLSI */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
12 /* Auteur(s) : Anthony LESTER le : 8/05/1994 */
14 /* Modifie par : le : ../../.... */
15 /* Modifie par : le : ../../.... */
16 /* Modifie par : le : ../../.... */
18 /****************************************************************************/
20 #include "yag_headers.h"
22 static ht
*loconvecht
;
23 static ht
*losigvecht
;
25 void yagInitLoconVect()
27 loconvecht
= addht(100);
30 void yagCloseLoconVect()
35 void yagInitLosigVect()
37 losigvecht
= addht(100);
40 void yagCloseLosigVect()
46 yagAddLoconVect(ptlofig
, name
, ptlosig
, dir
, vec
, pnode
, user
)
55 locon_list
*listpos
, *prevpos
;
61 stem
= vectorradical(name
);
63 newlocon
= addlocon(ptlofig
, name
, ptlosig
, dir
);
66 if ((listpos
= (locon_list
*)gethtitem(loconvecht
, stem
)) == (locon_list
*)EMPTYHT
) {
67 newlocon
= addlocon(ptlofig
, name
, ptlosig
, dir
);
68 addhtitem(loconvecht
, stem
, (long)ptlofig
->LOCON
);
71 index
= vectorindex(name
);
72 if ((vectorindex(listpos
->NAME
) < index
&& vec
== YAG_VECDOWNTO
)
73 || (vectorindex(listpos
->NAME
) > index
&& vec
== YAG_VECTO
)) {
74 if (listpos
== ptlofig
->LOCON
) {
75 newlocon
= addlocon(ptlofig
, name
, ptlosig
, dir
);
78 for (prevpos
= ptlofig
->LOCON
; prevpos
->NEXT
!= listpos
; prevpos
= prevpos
->NEXT
);
79 newlocon
= addlocon(ptlofig
, name
, ptlosig
, dir
);
80 ptlofig
->LOCON
= ptlofig
->LOCON
->NEXT
;
81 prevpos
->NEXT
= newlocon
;
82 newlocon
->NEXT
= listpos
;
84 sethtitem(loconvecht
, stem
, (long)newlocon
);
87 for (prevpos
= listpos
; prevpos
->NEXT
!= NULL
; prevpos
= prevpos
->NEXT
) {
88 nextname
= prevpos
->NEXT
->NAME
;
89 if ((vectorindex(nextname
) < index
&& vec
== YAG_VECDOWNTO
)
90 || (vectorindex(nextname
) > index
&& vec
== YAG_VECTO
)
91 || vectorradical(nextname
) != stem
) break;
93 newlocon
= addlocon(ptlofig
, name
, ptlosig
, dir
);
94 ptlofig
->LOCON
= ptlofig
->LOCON
->NEXT
;
95 newlocon
->NEXT
= prevpos
->NEXT
;
96 prevpos
->NEXT
= newlocon
;
100 newlocon
->PNODE
= pnode
;
101 newlocon
->USER
= user
;
106 yagAddGivenLoconVect(ptlofig
, ptlocon
, vec
)
111 locon_list
*listpos
, *prevpos
;
116 stem
= vectorradical(ptlocon
->NAME
);
117 if (stem
== ptlocon
->NAME
) {
118 ptlocon
->NEXT
= ptlofig
->LOCON
;
119 ptlofig
->LOCON
= ptlocon
;
122 if ((listpos
= (locon_list
*)gethtitem(loconvecht
, stem
)) == (locon_list
*)EMPTYHT
) {
123 ptlocon
->NEXT
= ptlofig
->LOCON
;
124 ptlofig
->LOCON
= ptlocon
;
125 addhtitem(loconvecht
, stem
, (long)ptlocon
);
128 index
= vectorindex(ptlocon
->NAME
);
129 if ((vectorindex(listpos
->NAME
) < index
&& vec
== YAG_VECDOWNTO
)
130 || (vectorindex(listpos
->NAME
) > index
&& vec
== YAG_VECTO
)) {
131 if (listpos
== ptlofig
->LOCON
) {
132 ptlocon
->NEXT
= ptlofig
->LOCON
;
133 ptlofig
->LOCON
= ptlocon
;
136 for (prevpos
= ptlofig
->LOCON
; prevpos
->NEXT
!= listpos
; prevpos
= prevpos
->NEXT
);
137 prevpos
->NEXT
= ptlocon
;
138 ptlocon
->NEXT
= listpos
;
140 sethtitem(loconvecht
, stem
, (long)ptlocon
);
143 for (prevpos
= listpos
; prevpos
->NEXT
!= NULL
; prevpos
= prevpos
->NEXT
) {
144 nextname
= prevpos
->NEXT
->NAME
;
145 if ((vectorindex(nextname
) < index
&& vec
== YAG_VECDOWNTO
)
146 || (vectorindex(nextname
) > index
&& vec
== YAG_VECTO
)
147 || vectorradical(nextname
) != stem
) break;
149 ptlocon
->NEXT
= prevpos
->NEXT
;
150 prevpos
->NEXT
= ptlocon
;
157 yagAddLosigVect(ptlofig
, sigindex
, ptnamechain
, type
)
160 chain_list
*ptnamechain
;
163 losig_list
*listpos
, *prevpos
;
164 losig_list
*newlosig
;
170 newlosig
= addlosig(ptlofig
, sigindex
, ptnamechain
, type
);
171 name
= getsigname(newlosig
);
172 stem
= vectorradical(name
);
178 if ((listpos
= (losig_list
*)gethtitem(losigvecht
, stem
)) == (losig_list
*)EMPTYHT
) {
179 addhtitem(losigvecht
, stem
, (long)newlosig
);
182 index
= vectorindex(name
);
183 if (vectorindex(getsigname(listpos
)) > index
) {
184 if (listpos
!= ptlofig
->LOSIG
->NEXT
) {
185 for (prevpos
= ptlofig
->LOSIG
; prevpos
->NEXT
!= listpos
; prevpos
= prevpos
->NEXT
);
186 ptlofig
->LOSIG
= ptlofig
->LOSIG
->NEXT
;
187 prevpos
->NEXT
= newlosig
;
188 newlosig
->NEXT
= listpos
;
190 sethtitem(losigvecht
, stem
, (long)newlosig
);
193 for (prevpos
= listpos
; prevpos
->NEXT
!= NULL
; prevpos
= prevpos
->NEXT
) {
194 nextname
= getsigname(prevpos
->NEXT
);
195 if (vectorindex(nextname
) > index
|| vectorradical(nextname
) != stem
) break;
197 ptlofig
->LOSIG
= ptlofig
->LOSIG
->NEXT
;
198 newlosig
->NEXT
= prevpos
->NEXT
;
199 prevpos
->NEXT
= newlosig
;