]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Empiezo a recomponer features desactivadas. En esta caso, abrir_emufs con
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 15:25:45 +0000 (15:25 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 15:25:45 +0000 (15:25 +0000)
 recuperacion de indices.

emufs/emufs.c
emufs/indices.c
emufs/indices.h
emufs_gui/articulos.c
emufs_gui/emufs_view.c
emufs_gui/facturas.c

index c80da2eb72580b42f2caf84e2802060179805837..067c4457d3ba0db82cb401b816f49015b389fd8a 100644 (file)
@@ -54,9 +54,11 @@ typedef struct _data_indices_ {
        INDICE_TIPO_DATO tipo_dato;
        unsigned int offset;
        unsigned int tam_bloque;
        INDICE_TIPO_DATO tipo_dato;
        unsigned int offset;
        unsigned int tam_bloque;
+       int str_offset;
 } t_Indice;
 
 } t_Indice;
 
-int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato,  unsigned int offset, unsigned int tam_bloque);
+int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato,  unsigned int offset, unsigned int tam_bloque, int str_offset);
+int cargar_indices(EMUFS *emu);
 
 char *str_dup(const char *s);
 
 
 char *str_dup(const char *s);
 
@@ -326,6 +328,8 @@ EMUFS *emufs_abrir(const char *filename)
                        emufs_tipo5_inicializar(efs);
        }       
 
                        emufs_tipo5_inicializar(efs);
        }       
 
+       /* finalmente cargo la data de los indices */
+       cargar_indices(efs);
        fclose(fp);
        return efs;
 }
        fclose(fp);
        return efs;
 }
@@ -453,7 +457,7 @@ int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDIC
        tmp = emufs_indice_crear(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque, str_offset);
 
        /* Guardo la info del indice para poder abrir despues el archivo */
        tmp = emufs_indice_crear(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque, str_offset);
 
        /* Guardo la info del indice para poder abrir despues el archivo */
-       guardar_indice(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque);
+       guardar_indice(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque, str_offset);
 
        if (tmp == NULL) {
                PERR("NO SE PUDO CREAR INDICE!!!");
 
        if (tmp == NULL) {
                PERR("NO SE PUDO CREAR INDICE!!!");
@@ -493,7 +497,7 @@ INDICE_DATO *emufs_buscar_registros(EMUFS *emu, char *indice, char *data, int *c
        return tmp->buscar_entradas(tmp, k, cant);
 }
 
        return tmp->buscar_entradas(tmp, k, cant);
 }
 
-int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato,  unsigned int offset, unsigned int tam_bloque)
+int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato,  unsigned int offset, unsigned int tam_bloque, int str_offset)
 {
        char filename[100];
        FILE *fp;
 {
        char filename[100];
        FILE *fp;
@@ -519,6 +523,7 @@ int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO
        indices[cant].tipo_dato = tipo_dato;
        indices[cant].offset = offset;
        indices[cant].tam_bloque = tam_bloque;
        indices[cant].tipo_dato = tipo_dato;
        indices[cant].offset = offset;
        indices[cant].tam_bloque = tam_bloque;
+       indices[cant].str_offset = str_offset;
 
        fseek(fp, SEEK_SET, 0);
        cant++;
 
        fseek(fp, SEEK_SET, 0);
        cant++;
@@ -529,6 +534,48 @@ int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO
        return 1;
 }
 
        return 1;
 }
 
+int cargar_indices(EMUFS *emu)
+{
+       char filename[100];
+       FILE *fp;
+       int cant, i; /* cantidad de indices hasta el momento */
+       t_Indice *indices;
+
+       sprintf(filename, "%s.info", emu->nombre);
+       fp = fopen(filename, "r");
+       PERR("Abri info");
+       PERR(filename);
+       if (fp == NULL) {
+               PERR("No se pudo");
+               return 0;
+       }
+
+       fread(&cant, 1, sizeof(int), fp);
+       indices = malloc(cant*sizeof(t_Indice));
+       fread(indices, cant, sizeof(t_Indice), fp);
+       fclose(fp);
+       
+       /* Leo  */
+       emu->indices = NULL;
+       for(i=cant-1; i>=0; i++) {
+               INDICE *tmp;
+               tmp = emufs_indice_abrir(emu,
+                               indices[i].nombre,
+                               indices[i].funcion,
+                               indices[i].tipo,
+                               indices[i].tipo_dato,
+                               indices[i].offset,
+                               indices[i].tam_bloque,
+                               indices[i].str_offset
+                       );
+               tmp->sig = emu->indices;
+               emu->indices = tmp;
+       }
+       
+       free(indices);
+       return 1;
+}
+
 /*crea un bloque y devuelve en numero del mismo*/
 EMUFS_BLOCK_ID emufs_create_new_block(EMUFS *emu)
 {
 /*crea un bloque y devuelve en numero del mismo*/
 EMUFS_BLOCK_ID emufs_create_new_block(EMUFS *emu)
 {
index aab487a4e77bf916017d65e6052351f3574e1cbd..7bb8928fc5f917cb84bea39dbd1c84130954ac33 100644 (file)
@@ -96,6 +96,98 @@ INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, IND
        return tmp;
 }
 
        return tmp;
 }
 
+INDICE *emufs_indice_abrir(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned int tam_bloque, int str_offset)
+{
+       int len;
+       INDICE *tmp;
+       char string_file[255];
+       tmp = (INDICE *)malloc(sizeof(INDICE));
+       if (tmp == NULL) return NULL;
+
+       len = strlen(emu->nombre);
+       len += strlen(nombre);
+
+       tmp->filename = (char *)malloc(sizeof(char)*(len+6));
+       strcpy(tmp->filename, emu->nombre);
+       strcat(tmp->filename, "_");
+       strcat(tmp->filename, nombre);
+       strcat(tmp->filename, ".idx");
+
+       tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1));
+       strcpy(tmp->nombre, nombre);
+
+       tmp->tipo = tipo;
+       tmp->tipo_dato = tipo_dato;
+       switch (tipo_dato) {
+               case IDX_STRING:
+                       sprintf(string_file, "%s_%s_%s", emu->nombre, nombre, "string");
+                       tmp->emu_string = emufs_crear(string_file, T2, 0, 0);
+               break;
+               case IDX_FLOAT:
+               case IDX_INT:
+                       tmp->emu_string = NULL;
+       }
+
+       tmp->tam_bloque = tam_bloque;
+       tmp->funcion = funcion;
+       switch (funcion) {
+               case IND_PRIMARIO:
+                       tmp->emu_mult = NULL;
+               break;
+               case IND_SELECCION:
+               case IND_EXAHUSTIVO:
+                       sprintf(string_file, "%s_%s_%s", emu->nombre, nombre, "multiples");
+                       tmp->emu_mult = emufs_crear(string_file, T2, 0, 0);
+       }
+
+       tmp->offset = offset;
+       tmp->str_offset = str_offset;
+       tmp->sig = NULL;
+       tmp->size_claves = 0;
+       tmp->size_hijos = 0;
+       tmp->keybucket = NULL;
+
+       fprintf(stderr, "TIPO ARBOL= %d\n", tmp->tipo);
+       switch (tmp->tipo) {
+               case IND_B:
+                       PERR("Creando indice con Arbol B");
+                       /* Ya esta creado XXX emufs_indice_b_crear(tmp); */
+                       tmp->agregar_entrada = emufs_indice_b_insertar;
+                       tmp->borrar_entrada = emufs_indice_b_borrar;
+                       tmp->existe_entrada = emufs_indice_b_buscar;
+                       tmp->buscar_entradas = emufs_indice_b_buscar_muchos;
+                       tmp->obtener_menor_clave = emufs_indice_b_obtener_menor_clave;
+                       tmp->obtener_mayor_clave = emufs_indice_b_obtener_mayor_clave;
+                       tmp->obtener_sig_clave = emufs_indice_b_obtener_sig_clave;
+               break;
+               case IND_B_ASC:
+                       /* llenar metodos */
+                       PERR("Creando indice con Arbol B*");
+                       /* Ya esta creado XXX emufs_indice_b_crear(tmp); */
+                       tmp->agregar_entrada = emufs_indice_b_asc_insertar;
+                       tmp->borrar_entrada = emufs_indice_b_borrar;
+                       tmp->existe_entrada = emufs_indice_b_buscar;
+                       tmp->buscar_entradas = emufs_indice_b_buscar_muchos;
+                       tmp->obtener_menor_clave = emufs_indice_b_obtener_menor_clave;
+                       tmp->obtener_mayor_clave = emufs_indice_b_obtener_mayor_clave;
+                       tmp->obtener_sig_clave = emufs_indice_b_obtener_sig_clave;
+                       break;
+               case IND_B_PLUS:
+                       /* llenar metodos */
+                       /* hacer que la cantidad de claves quede par o impar, no me acuerdo (SAGAR)!!!*/
+                       PERR("Creando indice con Arbol B+");
+                       tmp->size_claves = (tmp->tam_bloque - SIZE_B_PLUS_HEADER - sizeof(CLAVE))/2;
+                       tmp->size_hijos = tmp->size_claves + sizeof(CLAVE);
+                       /* Ya esta creado XXX emufs_b_plus_crear(tmp); */
+                       tmp->obtener_menor_clave = emufs_b_plus_obtener_menor_clave;
+                       tmp->obtener_mayor_clave = emufs_b_plus_obtener_mayor_clave;
+                       PERR("AÚN NO IMPLEMENTADO DEL TODO!!!!!!!!");
+                       break;
+       }
+
+       return tmp;
+}
+
 void emufs_indice_destruir(EMUFS *emu, INDICE *i)
 {
        /* TODO Sacar el indice de la lista en EMUFS */
 void emufs_indice_destruir(EMUFS *emu, INDICE *i)
 {
        /* TODO Sacar el indice de la lista en EMUFS */
index d85f56e2eb1a5b4d6ecaedfd4ee626611c50c670..2be19c2b03445c61830396f6674123d9397fe6d1 100644 (file)
@@ -120,6 +120,7 @@ typedef struct _indices_h_ {
  *  \param tam_bloque Tamaño del bloque (nodo) del arbol
  */
 INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned tam_bloque, int str_offset);
  *  \param tam_bloque Tamaño del bloque (nodo) del arbol
  */
 INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned tam_bloque, int str_offset);
+INDICE *emufs_indice_abrir(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned int tam_bloque, int str_offset);
 
 /** Destruye un indice
  *
 
 /** Destruye un indice
  *
index c042bfbe7c8843630b739441456c2e3eef59afa5..e5a685056abfd82505002653cf1e5aec1a38c069 100644 (file)
@@ -157,10 +157,7 @@ t_LstArticulos *art_cargar(t_Parametros *param)
                xmlFreeDoc(document);
                xmlCleanupParser();
        } else {
                xmlFreeDoc(document);
                xmlCleanupParser();
        } else {
-/*     XXX Ahora no necesito leer nada del archivo cuando lo cargo
- *     pues tengo todo en los indices
- *
- *     PERR("Voy a recuperar desde un archivo");
+               PERR("Voy a recuperar desde un archivo");
                tmp->fp = emufs_abrir("articulos");
                if (tmp->fp == NULL) {
                        PERR("No se pudo cargar archivo de articulos.");
                tmp->fp = emufs_abrir("articulos");
                if (tmp->fp == NULL) {
                        PERR("No se pudo cargar archivo de articulos.");
@@ -168,21 +165,6 @@ t_LstArticulos *art_cargar(t_Parametros *param)
                        lst_articulos = NULL;
                        return NULL;
                }
                        lst_articulos = NULL;
                        return NULL;
                }
-                Ahora trato de recuperar la info
-               indices = emufs_idx_get(tmp->fp, &indices_cant);
-               for(i=0; i<indices_cant; i++) {
-                       t_Articulo art;
-                       void *save;
-                        Leo el registro
-                       error = 0;
-                       save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error);
-                       if (procesar_leer_articulo(&art, save, size, tmp) == 1) {
-                               agregar_nodo_articulo(tmp, crear_nodo_articulo(indices[i], art.numero));
-                               free(save);
-                       }
-               }
-               free(indices);
-*/
        }
 
        return tmp;
        }
 
        return tmp;
index edce8e4d29ef1ee30f3af4b36c748a93a0387e39..fdd8c23be028901d5808e99fe4a9afda5fbfcdac 100644 (file)
@@ -271,8 +271,9 @@ int main(int argc, char *argv[])
        if (argc != 2) {
                print_help(argv[0]);
        }
        if (argc != 2) {
                print_help(argv[0]);
        }
-       
-       param_xml(argv[1], &parametros);
+
+       if (argc == 2)
+               param_xml(argv[1], &parametros);
 
 #ifdef DEBUG
        printf("CUIDADO! - Uds esta a punto de ejecutar EMUFS Gui compilado con mensajes de debug (-DDEBUG). ");
 
 #ifdef DEBUG
        printf("CUIDADO! - Uds esta a punto de ejecutar EMUFS Gui compilado con mensajes de debug (-DDEBUG). ");
@@ -326,16 +327,16 @@ int main(int argc, char *argv[])
 
        dialog = msg_box(stdscr, COLS, LINES, "Generando archivos ...");
 
 
        dialog = msg_box(stdscr, COLS, LINES, "Generando archivos ...");
 
-/*     if (parametros.xml_art != -1) {*/
+       if (argc == 2) {
                art_cargar(&parametros);
                art_cargar(&parametros);
-/*     } else {
+       } else {
                art_cargar(NULL);
        }
                art_cargar(NULL);
        }
-       if (parametros.xml_fact != -1) {*/
+       if (argc == 2) {
                fact_cargar(&parametros);
                fact_cargar(&parametros);
-/*     } else {
+       } else {
                fact_cargar(NULL);
                fact_cargar(NULL);
-       }*/
+       }
 
        msg_box_free(stdscr, dialog);
 
 
        msg_box_free(stdscr, dialog);
 
index de177691e1a7b691878e486d9b670ee58117f12c..23e9deb49acf420b2ce45c2f6960a2196bd8da96 100644 (file)
@@ -308,8 +308,6 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                xmlFreeDoc(document);
                xmlCleanupParser();
        } else {
                xmlFreeDoc(document);
                xmlCleanupParser();
        } else {
-#ifdef NO_SE_USA_MAS
-               /* TODO RECUPERAR INDICES DESDE EL ARCHIVO */
                PERR("Voy a recuperar desde un archivo");
                tmp->fp = emufs_abrir("facturas");
                if (tmp->fp == NULL) {
                PERR("Voy a recuperar desde un archivo");
                tmp->fp = emufs_abrir("facturas");
                if (tmp->fp == NULL) {
@@ -326,21 +324,6 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                        lst_facturas = NULL;
                        return NULL;
                }
                        lst_facturas = NULL;
                        return NULL;
                }
-
-               /* Ahora trato de recuperar la info */
-               indices = emufs_idx_get(tmp->fp, &indices_cant);
-               for(i=0; i<indices_cant; i++) {
-                       t_Factura art;
-                       void *save;
-                       /* Leo el registro */
-                       save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error);
-                       if (procesar_leer_factura(&art, save, size, tmp) == 1) {
-                               agregar_nodo_factura(tmp, crear_nodo_factura(indices[i], art.reg_nota, art.numero));
-                               free(save);
-                       }
-               }
-               free(indices);
-#endif
        }
 
        PERR("Facturas todo Ok");
        }
 
        PERR("Facturas todo Ok");