From: Ricardo Markiewicz Date: Tue, 25 May 2004 17:25:20 +0000 (+0000) Subject: varios cambios X-Git-Tag: svn_import_r684~204 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/defa938b3f327a42634161a5815e06f94b20b554?ds=sidebyside varios cambios --- diff --git a/emufs/indice_b.c b/emufs/indice_b.c index df09618..893a814 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -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 ((iemu_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; icant; 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; icant; 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); diff --git a/emufs/indices.c b/emufs/indices.c index c7235d9..1728d19 100644 --- a/emufs/indices.c +++ b/emufs/indices.c @@ -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; diff --git a/emufs/tipo3.c b/emufs/tipo3.c index e5b0fab..a28b635 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -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*/ } diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index f5bde1d..7d8c4d8 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -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); } diff --git a/emufs_gui/facturas.h b/emufs_gui/facturas.h index b417b28..3db27a6 100644 --- a/emufs_gui/facturas.h +++ b/emufs_gui/facturas.h @@ -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; diff --git a/emufs_gui/lista.c b/emufs_gui/lista.c index 1c00052..f33b167 100644 --- a/emufs_gui/lista.c +++ b/emufs_gui/lista.c @@ -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; diff --git a/emufs_gui/lista.h b/emufs_gui/lista.h index cbc0ead..e310905 100644 --- a/emufs_gui/lista.h +++ b/emufs_gui/lista.h @@ -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 */