5 void newpattern(UBYTE
*name
)
11 if(winfo
.currentpattern
)
13 free(winfo
.currentpattern
->pt_Node
.ln_Name
);
14 winfo
.currentpattern
->pt_Node
.ln_Name
= strdup(name
);
17 else if((p
= (struct patternnode
*)calloc(1,sizeof(struct patternnode
))))
19 p
->pt_Node
.ln_Name
= strdup(name
);
20 s
= p
->pt_Node
.ln_Name
+ strlen(p
->pt_Node
.ln_Name
) - 1;
21 while((*s
== ' ') || (*s
== '\n'))*s
-- = '\0';
23 AddTail(&winfo
.pattern
,(struct Node
*)p
);
24 winfo
.currentpattern
= p
;
27 void newclass(UBYTE
*name
)
33 if(winfo
.currentclass
)
35 free(winfo
.currentclass
->cl_Node
.ln_Name
);
36 winfo
.currentclass
->cl_Node
.ln_Name
= strdup(name
);
39 else if((c
= (struct classnode
*)calloc(1,sizeof(struct classnode
))))
41 c
->cl_Node
.ln_Name
= strdup(name
);
43 s
= c
->cl_Node
.ln_Name
+ strlen(c
->cl_Node
.ln_Name
) - 1;
44 while((*s
== ' ') || (*s
== '\n'))*s
-- = '\0';
45 NewList(&c
->cl_Words
);
47 c
->cl_Node
.ln_Pri
= strlen(c
->cl_Node
.ln_Name
);
48 Enqueue(&winfo
.class,(struct Node
*)c
);
49 winfo
.currentclass
= c
;
52 void newword(UBYTE
*name
)
56 if(winfo
.currentclass
)
62 free(winfo
.currentword
->wn_Node
.ln_Name
);
63 winfo
.currentword
->wn_Node
.ln_Name
= strdup(name
);
66 else if((w
= (struct wordnode
*)calloc(1,sizeof(struct wordnode
))))
68 w
->wn_Node
.ln_Name
= strdup(name
);
69 s
= w
->wn_Node
.ln_Name
+ strlen(w
->wn_Node
.ln_Name
) - 1;
70 while((*s
== ' ') || (*s
== '\n'))*s
-- = '\0';
71 winfo
.currentclass
->cl_NumWords
++;
72 w
->wn_Class
= winfo
.currentclass
;
73 w
->wn_Node
.ln_Pri
= strcmp("",w
->wn_Node
.ln_Name
);
74 Enqueue(&winfo
.currentclass
->cl_Words
,(struct Node
*)w
);
75 winfo
.currentword
= w
;
81 if(winfo
.currentpattern
)
84 Remove((struct Node
*)winfo
.currentpattern
);
85 free(winfo
.currentpattern
->pt_Node
.ln_Name
);
86 winfo
.numpattern
-= (winfo
.numpattern
> 0) ? 1 :0 ;
87 free(winfo
.currentpattern
);
88 winfo
.currentpattern
= NULL
;
94 if(winfo
.currentclass
)
97 Remove((struct Node
*)winfo
.currentclass
);
98 free(winfo
.currentclass
->cl_Node
.ln_Name
);
99 winfo
.numclass
-= (winfo
.numclass
> 0) ? 1 :0 ;
100 delwordlist(winfo
.currentclass
);
101 free(winfo
.currentclass
);
102 winfo
.currentclass
= NULL
;
108 if(winfo
.currentword
)
111 Remove((struct Node
*)winfo
.currentword
);
112 free(winfo
.currentword
->wn_Node
.ln_Name
);
113 winfo
.currentword
->wn_Class
->cl_NumWords
-=
114 (winfo
.currentword
->wn_Class
->cl_NumWords
> 0) ? 1 : 0;
115 free(winfo
.currentword
);
116 winfo
.currentword
= NULL
;
121 void delwordlist(struct classnode
*cl
)
125 while((n
= RemHead(&cl
->cl_Words
)))
136 struct classnode
*cl
;
137 winfo
.currentpattern
= NULL
;
138 winfo
.currentclass
= NULL
;
139 winfo
.currentword
= NULL
;
140 winfo
.numpattern
= 0;
145 if(winfo
.nach
){free(winfo
.nach
);winfo
.nach
= NULL
;};
146 list_off(LIST_PT
);list_off(LIST_CL
);list_off(LIST_WD
);
147 while((n
= RemHead(&winfo
.pattern
)))
152 while((cl
= (struct classnode
*)RemHead(&winfo
.class)))
154 while((n
= RemHead(&cl
->cl_Words
)))
159 free(cl
->cl_Node
.ln_Name
);
162 list_on(LIST_PT
);list_on(LIST_CL
);list_on(LIST_WD
);
165 struct Node
*NumToNode(struct List
*list
,UWORD Num
)
167 struct Node
*n
= list
->lh_Head
;
175 void list_off(ULONG which
)
180 GT_SetGadgetAttrs(Project0Gadgets
[GDX_templatelist
],Project0Wnd
,NULL
,GTLV_Labels
,-1, TAG_DONE
);
183 GT_SetGadgetAttrs(Project0Gadgets
[GDX_classlist
],Project0Wnd
,NULL
,GTLV_Labels
,-1, TAG_DONE
);
186 GT_SetGadgetAttrs(Project0Gadgets
[GDX_wordlist
],Project0Wnd
,NULL
,GTLV_Labels
,-1, TAG_DONE
);
190 void list_on(ULONG which
)
195 case LIST_PT
: num
= (winfo
.currentpattern
) ? NodeToNum(&winfo
.pattern
,(struct Node
*)winfo
.currentpattern
) : NodeToNum(&winfo
.pattern
,winfo
.pattern
.lh_TailPred
);
196 GT_SetGadgetAttrs(Project0Gadgets
[GDX_templatelist
],Project0Wnd
,NULL
,GTLV_Labels
,&winfo
.pattern
,GTLV_Top
, num
,GTLV_Selected
,num
,TAG_DONE
);
198 case LIST_CL
: num
= (winfo
.currentclass
) ? NodeToNum(&winfo
.class,(struct Node
*)winfo
.currentclass
) : NodeToNum(&winfo
.class,winfo
.class.lh_TailPred
);
199 GT_SetGadgetAttrs(Project0Gadgets
[GDX_classlist
],Project0Wnd
,NULL
,GTLV_Labels
,&winfo
.class, GTLV_Top
, num
,GTLV_Selected
,num
,TAG_DONE
);
200 if(winfo
.currentclass
)
202 num
= (winfo
.currentword
) ? NodeToNum(&winfo
.currentclass
->cl_Words
,(struct Node
*)winfo
.currentword
) : NodeToNum(&winfo
.currentclass
->cl_Words
,winfo
.currentclass
->cl_Words
.lh_TailPred
);
203 GT_SetGadgetAttrs(Project0Gadgets
[GDX_wordlist
],Project0Wnd
,NULL
,GTLV_Labels
,&winfo
.currentclass
->cl_Words
,GTLV_Top
,num
, GTLV_Selected
,num
,TAG_DONE
);
207 if(winfo
.currentclass
)
209 num
= (winfo
.currentword
) ? NodeToNum(&winfo
.currentclass
->cl_Words
,(struct Node
*)winfo
.currentword
) : NodeToNum(&winfo
.currentclass
->cl_Words
,winfo
.currentclass
->cl_Words
.lh_TailPred
);
210 GT_SetGadgetAttrs(Project0Gadgets
[GDX_wordlist
],Project0Wnd
,NULL
,GTLV_Labels
,&winfo
.currentclass
->cl_Words
,GTLV_Top
,num
, GTLV_Selected
,num
,TAG_DONE
);
216 ULONG
NodeToNum(struct List
*list
,struct Node
*node
)
220 for(n
= list
->lh_Head
;n
->ln_Succ
;n
= n
->ln_Succ
,num
++)