"SfR Fresh" - the SfR Freeware/Shareware Archive 
Member "ocre-0.029/id3/arbolesid3.c" of archive ocre_v0_029.tgz:
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
1
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <string.h>
5
6 #include "arbolesid3.h"
7 #include "tabla2.h"
8 #include "id3.h"
9 /*
10 #include "errors.h"
11 */
12
13 int FALSE=0;
14 int TRUE=1;
15
16 void leeArbolesN (tplarboles * nllarboles, char * dir)
17 {
18 char nf[128];
19 char nfa[128];
20 FILE * fd;
21 int nl, l;
22 int na, ia;
23 tplarboles plarbs, plarbsAnt;
24 char nom[128];
25 int nc;
26 sprintf(nf, "%s/00index", dir);
27 fd = fopen (nf, "r");
28 /*
29 compruebaFd (fd, nf, "imagio.leeImagen");
30 */
31 if (fd == NULL) {
32 printf ("arbolesid3: error at leeArboles opening index %s\n",nf);
33 exit (1);
34 }
35 fscanf (fd, "%d", &nl);
36 for (l=0; l<nl; l++) {
37 fscanf (fd, "%d", &na);
38 plarbs = (tplarboles) malloc (sizeof(struct tlarboles));
39 plarbs->num = na;
40 plarbs->larb = (tpnodo *) malloc(na * sizeof(tpnodo));
41 fscanf(fd, "%s", nom);
42 nc = strlen (nom);
43 plarbs->nombre = (char *) malloc((nc+1) * sizeof(char));
44 strcpy (plarbs->nombre, nom);
45 for (ia=0; ia<na; ia++) {
46 sprintf(nfa, "%s/%s=%02d.id3", dir, nom, ia);
47 plarbs->larb[ia] = leeArbol(nfa);
48 }
49 if (l == 0)
50 * nllarboles = plarbs ;
51 if (l > 0)
52 plarbsAnt->next = plarbs;
53 plarbsAnt = plarbs;
54 }
55 plarbsAnt->next = (tplarboles) 0L;
56 fclose (fd);
57 }
58
59 void leeArboles (char * dir)
60 {
61 leeArbolesN (&llarboles, dir);
62 }
63
64 void escribeArboles0 (char * dir, char * nomc, int nar)
65 {
66 int ia;
67 char nomFich[128];
68 borraMascara ();
69 for (ia=0; ia<nar; ia++) {
70 sprintf (nomFich, "%s/arbol_%s=%02d.id3", dir, nomc, ia);
71 escribeArbol (nomFich, arbolId3() );
72 actualizaMascara ();
73 }
74 }
75
76 void escribeArboles (char * dir, char * nomc, int nar)
77 {
78 fijaFunc (nomc);
79 escribeArboles0 (dir, nomc, nar);
80 }
81
82 // en directorio dir,
83 // nnomc (numero de) nombres de caracter nomc[i],
84 // separados por cs
85 // nar (numero de) arboles
86 void escribeArbolesO (char * dir, char ** nomc, int nnomc, char *cs, int nar)
87 {
88 int i;
89 char nomcc[128];
90 fijaFunc (nomc[0]);
91 strncpy (nomcc, cs, 2);
92 strncat (nomcc, nomc[0], 20);
93 for (i=1; i<nnomc; i++){
94 oFunc (nomc[i]);
95 strncat (nomcc, cs, 2);
96 strncat (nomcc, nomc[i], 20);
97 }
98 escribeArboles0 (dir, nomcc, nar);
99 }
100
101 void evaluaConArbolesInd (tplarboles plarbs, int v[], int res[])
102 /* res[] int .. [3] */
103 {
104 int ia;
105 int r;
106 res [nd_falso] = 0;
107 res [nd_cierto] = 0;
108 res [nd_nose ] = 0;
109 for (ia=0; ia < plarbs->num; ia++){
110 r = evalArbolVector (plarbs->larb[ia], v);
111 res [r] ++ ;
112 }
113 }
114
115 tplarboles buscaNomEnArbolesN (tplarboles nllarboles, char * nomCar)
116 {
117 tplarboles plarbs;
118 for(plarbs = nllarboles; plarbs != 0L; plarbs = plarbs->next){
119 if (strcmp(nomCar,plarbs->nombre) == 0) break ;
120 }
121 if (plarbs == 0L) {
122 printf ("arbolesid3: error en evaluaConArbolesN buscando nomCar=%s\n", nomCar);
123 exit (1);
124 }
125 return plarbs;
126 }
127
128 tplarboles buscaNomEnArboles (char * nomCar)
129 {
130 tplarboles plarbs;
131 for(plarbs = llarboles; plarbs != 0L; plarbs = plarbs->next){
132 if (strcmp(nomCar,plarbs->nombre) == 0) break ;
133 }
134 if (plarbs == 0L) {
135 printf ("arbolesid3: error en evaluaConArboles buscando nomCar=%s\n", nomCar);
136 exit (1);
137 }
138 return plarbs;
139 }
140
141 void evaluaConArbolesN (tplarboles nllarboles, char * nomCar, int v[], int res[])
142 // res[] int .. [3]
143 {
144 tplarboles plarbs;
145 plarbs = buscaNomEnArbolesN (nllarboles, nomCar);
146 evaluaConArbolesInd (plarbs, v, res);
147 /*
148 printf ("evaluaConArbolesN %s %2d %2d %2d\n",plarbs, res[0], res[1], res[2]);
149 */
150 }
151
152 void evaluaConArboles (char * nomCar, int v[], int res[])
153 /* res[] int .. [3] */
154 {
155 tplarboles plarbs;
156 plarbs = buscaNomEnArboles (nomCar);
157 evaluaConArbolesInd (plarbs, v, res);
158 /*
159 printf ("evaluaConArboles %s %2d %2d %2d\n",plarbs, res[0], res[1], res[2]);
160 */
161 }
162
163 float valProp (int * res)
164 {
165 int narb;
166 narb = res[0]+res[1]+res[2] ;
167 return (0.5 + res[1]) / (narb+1.0) ;
168 }
169 /**/
170 float umbrValPropDef = 0.45; // 0.45 (o 0.25?)
171
172 void reordenaPropuestas (tppropues lprop, char * nom, int * res, int npp, int * pnprp)
173 {
174 int i, j;
175 int encontrado;
176 /* busca posicion */
177 encontrado = FALSE;
178 i = 0;
179 while (!encontrado && (i < *pnprp)) {
180 if (valProp(res) > valProp(lprop[i].res)) encontrado = TRUE;
181 else i++;
182 }
183 /* la posicion a insertar es i */
184 if (i == npp) return ; /* no cabe, no es de las npp mejores */
185 if (i < *pnprp) {
186 /* deplazar lo que haya tras i (inclusive), i .. (*pnprp)-1 */
187 for (j = (*pnprp)-1; j>=i; j--) {
188 lprop[j+1].nombre = lprop[j].nombre ;
189 lprop[j+1].narb = lprop[j].narb ;
190 lprop[j+1].res[0] = lprop[j].res[0] ;
191 lprop[j+1].res[1] = lprop[j].res[1] ;
192 lprop[j+1].res[2] = lprop[j].res[2] ;
193 }
194 }
195 /* introducir la propuesta en i */
196 lprop[i].nombre = nom ;
197 lprop[i].narb = res[0]+res[1]+res[2] ;
198 lprop[i].res[0] = res[0] ;
199 lprop[i].res[1] = res[1] ;
200 lprop[i].res[2] = res[2] ;
201 /**/
202 (*pnprp)++ ;
203 // printf ("=====%4d %4d %4d %s\n", i, npp, *pnprp, nom);
204 }
205
206 void clasificaConArbolesN (tplarboles llarboles,
207 int v[], tppropues lprop, int npp, int * pnprp,
208 float umbrValProp)
209 {
210 int res[3];
211 tplarboles plarbs;
212 * pnprp = 0;
213 for(plarbs = llarboles; plarbs != 0L; plarbs = plarbs->next){
214 evaluaConArbolesInd (plarbs, v, res);
215 // para ver traza de dcsw
216 // if (res[0]!=5)
217 // printf("%1d %1d %1d %10s\n", res[0], res[1], res[2], plarbs->nombre);
218 //
219 if (valProp (res) > umbrValProp)
220 reordenaPropuestas (lprop, plarbs->nombre, res, npp, pnprp);
221 }
222 // para ver traza de dcsw
223 // printf ("\n");
224 //
225 }
226
227 void clasificaConArboles (int v[], tppropues lprop, int npp, int * pnprp)
228 {
229 clasificaConArbolesN (llarboles, v, lprop, npp, pnprp, umbrValPropDef);
230 }
231