]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
varios cambios
authorRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 25 May 2004 17:25:20 +0000 (17:25 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 25 May 2004 17:25:20 +0000 (17:25 +0000)
emufs/indice_b.c
emufs/indices.c
emufs/tipo3.c
emufs_gui/facturas.c
emufs_gui/facturas.h
emufs_gui/lista.c
emufs_gui/lista.h

index df096183359c6a03096021cf6c8d48fca81e319c..893a814ef1ed3ab0150eb37e00aedebf323ccc13 100644 (file)
@@ -120,7 +120,6 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato)
                
                        if (idx->tipo_dato == IDX_STRING) {
                                /* Tengo que sacar el texto repetido del archivo de textos */
-                               PERR("Eliminando string duplicado");
                                idx->emu_string->borrar_registro(idx->emu_string, clave);
                        }
                        return 1;
@@ -162,9 +161,13 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave)
        B_NodoHeader header;
        B_NodoEntry *claves;
        char *nodo, *tmp;
+       int nodo_id;
        
        /* Leo la raiz */
+       PERR("LEO LA RAIZ");
        nodo = b_leer_nodo(idx, 0);
+       nodo_id = 0;
+       PERR("VAMOS");
        while (nodo) {
                b_leer_header(nodo, &header);
                claves = b_leer_claves(nodo, &header);
@@ -172,14 +175,18 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave)
                while ((i<header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, clave))) i++;
                if ((i<header.cant) && (emufs_indice_es_igual(idx, claves[i].clave, clave))) {
                                ret = claves[i].dato;
+                               b_grabar_nodo(idx, nodo_id, nodo);
                                free(nodo);
                                return ret;
                } else {
                        tmp = nodo;
+                       b_grabar_nodo(idx, nodo_id, nodo);
                        if (i == 0) {
                                nodo = b_leer_nodo(idx, header.hijo_izquierdo);
+                               nodo_id = header.hijo_izquierdo;
                        } else {
                                nodo = b_leer_nodo(idx, claves[i-1].hijo_derecho);
+                               nodo_id = claves[i-1].hijo_derecho;
                        }
                        free(tmp);
                }
@@ -842,7 +849,6 @@ static EMUFS_REG_ID b_insertar_dup_en_pos(INDICE *idx, INDICE_DATO pos, INDICE_D
        if (k.i_clave == -1) {
                /* Creo uno nuevo */
                error = 0;
-               PERR("GRABADO REGISTRO NUEVO");
                k.i_clave = idx->emu_mult->grabar_registro(idx->emu_mult,
                        leido,
                        cant*sizeof(INDICE_DATO)+sizeof(int),
@@ -851,7 +857,6 @@ static EMUFS_REG_ID b_insertar_dup_en_pos(INDICE *idx, INDICE_DATO pos, INDICE_D
                if (k.i_clave == -1) PERR("ALGO NO GRABO BIEN!!");
        } else {
                /* Modifico el que ya existia! */
-               PERR("MODIFICANDO REGISTRO EXISTENTE");
                error = 0;
                idx->emu_mult->modificar_registro(idx->emu_mult,
                        k.i_clave,
@@ -893,6 +898,10 @@ static void abreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *heade
        primera = (char *)idx->emu_string->leer_registro(idx->emu_string, array[0].clave, &size, &error);
        for(i=1; i<header->cant; i++) {
                actual = (char *)idx->emu_string->leer_registro(idx->emu_string, array[i].clave, &size, &error);
+               if (*actual == '*') {
+                       free(actual);
+                       continue;
+               }
                resto = abreviar(primera, actual, &iguales);
                /* Para que tenga sentido abreviar tengo que tener
                 * mas de 2 letras iguales, si no no gano nada y complica las cosas
@@ -922,6 +931,10 @@ static void desabreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *he
        primera = (char *)idx->emu_string->leer_registro(idx->emu_string, array[0].clave, &size, &error);
        for(i=1; i<header->cant; i++) {
                actual = (char *)idx->emu_string->leer_registro(idx->emu_string, array[i].clave, &size, &error);
+               if (*actual == '*') {
+                       free(actual);
+                       continue;
+               }
                iguales = strtol(actual, &resto, 10);
                if ((iguales > 0) && (*resto == '|')) {
                        fprintf(stderr, "%s %s %d\n", primera, actual, iguales); 
index c7235d9cb07401941cf9e5fbc9ea21bc5e54349f..1728d1984c45b8fa401461c442ee4540ec4685b1 100644 (file)
@@ -100,6 +100,7 @@ CLAVE emufs_indice_generar_clave_desde_valor(INDICE *idx, char *data)
 {
        int error;
        CLAVE k;
+       char salvar[100];
        if (idx == NULL) PERR("NULL INDEX!");
 
        switch (idx->tipo_dato) {
@@ -114,13 +115,14 @@ CLAVE emufs_indice_generar_clave_desde_valor(INDICE *idx, char *data)
                         * Ver de borrarla despues de usarla
                         */
                        error = 0;
-                       PERR("VOY A GRABAR TEXTO EN ARCHIVO");
+                       /* Le agrego un * para diferenciarla, porque no la tengo abreviada! */
+                       /* Hack feo :-D */
+                       sprintf(salvar, "*%s", data);
                        k.i_clave = idx->emu_string->grabar_registro(idx->emu_string,
-                                                                               data,
-                                                                               strlen(data)+1,
+                                                                               salvar,
+                                                                               strlen(salvar)+1,
                                                                                &error
                                                                        );
-                       fprintf(stderr, "GENERE CLAVE CON (%s) y estoy en ID=%d\n", data, k.i_clave);
        }
 
        return k;
@@ -154,7 +156,7 @@ int emufs_indice_es_menor(INDICE *idx, CLAVE c1, CLAVE c2)
 {
        char *sc1, *sc2; /* Si es IDX_STRING aca pongo los strings leidos */
        EMUFS_REG_SIZE dummy; /* No me interesa el tamaño del string aca! */
-       int error=0;
+       int error=0, a, b;
 
        switch (idx->tipo_dato) {
                case IDX_FLOAT:
@@ -164,7 +166,11 @@ int emufs_indice_es_menor(INDICE *idx, CLAVE c1, CLAVE c2)
                case IDX_STRING:
                        sc1 = idx->emu_string->leer_registro(idx->emu_string, c1, &dummy, &error);
                        sc2 = idx->emu_string->leer_registro(idx->emu_string, c2, &dummy, &error);
-                       error = (strcmp(sc1, sc2) < 0);
+                       /* Salteo el caracter que indica si la clave en temporal */
+                       a = b = 0;
+                       if (*sc1 == '*') a = 1;
+                       if (*sc2 == '*') b = 1;
+                       error = (strcmp(sc1+a, sc2+b) < 0);
                        free(sc1);
                        free(sc2);
                        return error;
@@ -176,7 +182,7 @@ int emufs_indice_es_igual(INDICE *idx, CLAVE c1, CLAVE c2)
 {
        char *sc1, *sc2; /* Si es IDX_STRING aca pongo los strings leidos */
        EMUFS_REG_SIZE dummy; /* No me interesa el tamaño del string aca! */
-       int error;
+       int error, a, b;
 
        switch (idx->tipo_dato) {
                case IDX_FLOAT:
@@ -188,9 +194,13 @@ int emufs_indice_es_igual(INDICE *idx, CLAVE c1, CLAVE c2)
                        sc1 = idx->emu_string->leer_registro(idx->emu_string, c1, &dummy, &error);
                        error = 0;
                        sc2 = idx->emu_string->leer_registro(idx->emu_string, c2, &dummy, &error);
-                       error = (strcmp(sc1, sc2) == 0);
-                       if (sc1) free(sc1);
-                       if (sc2) free(sc2);
+                       /* Salteo el caracter que indica si la clave en temporal */
+                       a = b = 0;
+                       if (*sc1 == '*') a=1;
+                       if (*sc2 == '*') b=1;
+                       error = (strcmp(sc1+a, sc2+b) == 0);
+                       free(sc1);
+                       free(sc2);
                        return error;
        }
        return 0;
index e5b0fab3c868a4b040f688cb88fe008fba9de8e3..a28b635f5a0d120031b4ba3de425ae98b04e3320 100644 (file)
@@ -64,10 +64,12 @@ void* emufs_tipo3_leer_registro(EMUFS *emu, CLAVE clave,
                dato = emu->indices->existe_entrada(emu->indices, clave);
                block = dato.bloque;
                ID = dato.id;
+               PERR("Use indice");
        } else {
                /* Si no tengo claves, uso el campo entero para pasar un ID
                 * directamente.
                 */
+               PERR("Use directo");
                ID = clave.i_clave;
                block = emufs_idx_buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/
        }
index f5bde1d538b357765acd6268fd453001faccaa2a..7d8c4d82e1002580d09ea9e6ec86a0280cadef70 100644 (file)
@@ -264,9 +264,15 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t
                                        save = procesar_guardar_factura(&fact, lst_facturas, &size);
                                        if (save != NULL) {
                                                error = 0;
-                                               id = tmp->fp->grabar_registro(tmp->fp, save, size, &error);
-                                               if (fact.items) free(fact.items);
-                                               if (fact.nota) free(fact.nota);
+                                               tmp->fp->grabar_registro(tmp->fp, save, size, &error);
+                                               if (fact.items) {
+                                                       free(fact.items);
+                                                       fact.items = NULL;
+                                               }
+                                               if (fact.nota) {
+                                                       free(fact.nota);
+                                                       fact.nota = NULL;
+                                               }
                                                free(save);
                                        }
                                }
@@ -344,6 +350,7 @@ t_Factura *fact_buscar(t_LstFacturas *lst, int numero, EMUFS_REG_ID *id, EMUFS_R
 
        fact = NULL;
        k = emufs_indice_generar_clave_desde_valor(lst->fp->indices, (char*)&numero);
+       error = 0;
        leo = lst->fp->leer_registro(lst->fp, k, &size, &error);
        if (leo != NULL) {
                fact = (t_Factura *)malloc(sizeof(t_Factura));
@@ -358,6 +365,7 @@ t_Factura *fact_buscar(t_LstFacturas *lst, int numero, EMUFS_REG_ID *id, EMUFS_R
                */
                free(leo);
                k.i_clave = fact->reg_nota;
+               error = 0;
                fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error);
        }
        
index b417b2817a7d0d4f5a1940213c8c14df17105839..3db27a6c86403ee24331d86adbb61f745947d159 100644 (file)
@@ -19,8 +19,8 @@ typedef struct _t_item_ {
        char pvu[9];
 } t_Item;
 
+/* Dejo los campos numericos al principio para mayor facilidad de parseo. */
 typedef struct _facturas_ {
-       /* Dejo los campos numericos al principio para mayor facilidad de parseo. */
        int numero;
        float procdoi;
        int numero_remito;
index 1c00052ba95b6440735a2d53a60c489421ce5df5..f33b167c830723148acafdf4aaeccb7423e4f809 100644 (file)
@@ -90,6 +90,7 @@ void print_lista(t_Lista *lst, t_Fila *fil, int sel)
        char format[100];
        t_Columna *col;
        int y=0, i;
+       werase(lst->win);
        while (fil) {
                /* Si no entran mas filas salgo! */
                if (y>lst->h) break;
index cbc0ead6061d493f0d3625c9952991f95fe529b1..e31090514dc2633c7cbf88bff381a0535214b9f2 100644 (file)
@@ -33,7 +33,7 @@ typedef struct _columna_ {
 typedef struct _fila_ {
        t_Dato *datos;       /**< Array de datos. Debe tener tantos items como columnas existan. */
        struct _fila_ *sig;  /**< Puntero a la siguiente fila */
-       struct _file_ *ant;  /**< Puntero a la fila anterior */
+       struct _fila_ *ant;  /**< Puntero a la fila anterior */
 } t_Fila;
 
 /** Lista */