]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/generar_archivos/dict.c
no anda perfecto pero ahora actualiza mucho mejor el fsc
[z.facultad/75.06/emufs.git] / emufs_gui / generar_archivos / dict.c
1
2 #include "dict.h"
3
4 char *leer_linea(FILE *fp)
5 {
6         char *ret;
7         char tmp[255]; /* Hack! */
8         if (feof(fp)) return NULL;
9         tmp[0] = '\0';
10         fscanf(fp, "%[^\n]", tmp); /* Leo una linea */
11         fgetc(fp); /* saco el \n */
12         if (strlen(tmp) == 0) return NULL;
13         ret = malloc(sizeof(char)*(strlen(tmp)+1));
14         strcpy(ret, tmp);
15         return ret;
16 }
17
18 t_Dict* dict_crear(const char *f)
19 {
20         t_Dict *tmp;
21         FILE *fp;
22         unsigned int count = 0;
23         char *s;
24
25         fp = fopen(f, "rt");
26         if (fp == NULL) return NULL;
27
28         tmp = (t_Dict *)malloc(sizeof(t_Dict));
29         if (tmp == NULL) return NULL;
30         tmp->array = NULL;
31         tmp->total = 0;
32
33         s = (char*)(-1L);
34         while (s!=NULL) {
35                 s = leer_linea(fp);
36                 if (s != NULL) {
37                         count++;
38                         tmp->array = (char **)realloc(tmp->array, sizeof(char *)*count);
39                         tmp->array[count-1] = s;
40                 }
41         }
42
43         tmp->total = count;
44         fclose(fp);
45         return tmp;
46 }
47
48 void dict_destruir(t_Dict *d)
49 {
50         int i;
51         for(i=0; i<d->total; i++)
52                 free(d->array[i]);
53         free(d->array);
54         free(d);
55 }
56
57 char *dict_get_al_azar(t_Dict *d)
58 {
59         return dict_get(d, al_azar(0, d->total));
60 }
61
62 char *dict_get(t_Dict *d, unsigned int pos)
63 {
64         if (pos < d->total) {
65                 return d->array[pos];
66         }
67
68         return "";
69 }
70