]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Cambio algunos printf por fprintf(stderr
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sat, 29 May 2004 18:43:52 +0000 (18:43 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sat, 29 May 2004 18:43:52 +0000 (18:43 +0000)
 * Agrego un nuevo campo en INDICE para poder usar claves
 string en tipos de archivo de registro de long variable
 * Seguro que algo mas cambie.

emufs/b_plus_test.c
emufs/emufs.c
emufs/emufs.h
emufs/indices.c
emufs/indices.h
emufs/tipo1_bplus_main.c
emufs/tipo3_bplus_main.c
emufs_gui/articulos.c
emufs_gui/emufs.xml
emufs_gui/facturas.c

index c9ccc83e3d92f69d8adb1c3f541a4dddf5c0fc15..00f0c6b87f14c2b52dc346816b5a12645d7923b0 100644 (file)
@@ -15,7 +15,7 @@ int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
 
 /* Creamos un handler EMUFS, luego un Indice B+ y testing... */
 EMUFS *emu = emufs_crear("fact",T1,512,0);
-emufs_agregar_indice(emu,"nrofact",IND_PRIMARIO,IND_B_PLUS,IDX_INT,16,tam_nodo);       
+emufs_agregar_indice(emu,"nrofact",IND_PRIMARIO,IND_B_PLUS,IDX_INT,16,tam_nodo, 0);    
 printf("\nTam Nodo: %i  Size Claves: %i  Size_Hijos: %i\n",emu->indices->tam_bloque,emu->indices->size_claves,emu->indices->size_hijos);
 
 for (i=1;i<34;i = i*2)
@@ -48,17 +48,17 @@ printf("Exit Code del get bloque: %i\n",exitcode);
 querydata.clave.i_clave = 4;
 querydata.num_bloque = 0; /* al pedo */
 exitcode = b_plus_existe_clave(emu->indices,&querydata,0);
-if (exitcode == 1) printf("El nodo hoja donde esta la clave %i es %i\n",querydata.clave.i_clave,querydata.num_bloque);
+if (exitcode == 1) printf("El nodo hoja donde esta la clave %i es %ld\n",querydata.clave.i_clave,querydata.num_bloque);
 printf("Exit Code del Buscar Clave: %i\n",exitcode);
 
 querydata.clave.i_clave = 4;
 if ((exitcode = b_plus_buscar_prepost(emu->indices,querydata.clave,0,&postkey,1)) == -1)
        printf("Busque una clave mayor o igual a la mas grande del arbol\n");
-printf("El Sucesor de la clave %i es %i cuyo hijo es %i\n",querydata.clave.i_clave,postkey.clave.i_clave,postkey.num_bloque);
+printf("El Sucesor de la clave %i es %i cuyo hijo es %ld\n",querydata.clave.i_clave,postkey.clave.i_clave,postkey.num_bloque);
 
 if ((exitcode = b_plus_buscar_prepost(emu->indices,querydata.clave,0,&prekey,0)) == -1)
        printf("Busque una clave menor o igual a la mas chica del arbol\n");
-printf("El Predecesor de la clave %i es %i cuyo hijo es %i\n",querydata.clave.i_clave,prekey.clave.i_clave,prekey.num_bloque);
+printf("El Predecesor de la clave %i es %i cuyo hijo es %ld\n",querydata.clave.i_clave,prekey.clave.i_clave,prekey.num_bloque);
 
 /*exitcode = emufs_b_plus_reemplazar_clave(emu->indices,querydata.clave,prekey);*/
 /*querydata.clave.i_clave = 32;
index 8ad9604233fbc1c837de5540250fe503c0c880f0..712ae91cbc471e538c3b0c6c309922a727008971 100644 (file)
@@ -374,7 +374,7 @@ int debug_ver_estadisticas(EMUFS* efs)
        return 0;
 }
 
-int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato,  unsigned int offset, unsigned int tam_bloque)
+int emufs_agregar_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)
 {
        INDICE *tmp;
        int error=0;
@@ -408,7 +408,7 @@ int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDIC
 
        /* Creo el nuevo indice */
        PERR("Creando indice\n");
-       tmp = emufs_indice_crear(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque);
+       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);
index f9f7b85a9aa61351f6473114de8582423af3728a..b73eaaf7a2b978b5aa148cab67ab1be0377ccba7 100644 (file)
@@ -173,7 +173,7 @@ int ver_archivo_FS(EMUFS *emu);
 /** muestra estadisticas, para debug. */
 int debug_ver_estadisticas(EMUFS *emu);
 
-int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato,  unsigned int offset, unsigned int tam_bloque); 
+int emufs_agregar_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); 
 
 INDICE_DATO *emufs_buscar_registros(EMUFS *emu, char *indice, char *data, int *cant);
 
index f7a0ff2f03b7b009cb275d769fcc2457fac04787..33b6f7dbe5443f8ad16d67f0e510e5638d569f94 100644 (file)
@@ -4,7 +4,7 @@
 #include "indice_b.h"
 #include "indice_bplus.h"
 
-INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned int tam_bloque)
+INDICE *emufs_indice_crear(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;
@@ -49,6 +49,7 @@ INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, IND
        }
 
        tmp->offset = offset;
+       tmp->str_offset = str_offset;
        tmp->sig = NULL;
        tmp->size_claves = 0;
        tmp->size_hijos = 0;
@@ -150,6 +151,8 @@ CLAVE emufs_indice_generar_clave(INDICE *idx, char *data)
 {
        CLAVE k;
        int error;
+       int c;
+       char *ptr;
 
        switch (idx->tipo_dato) {
                case IDX_FLOAT:
@@ -159,12 +162,19 @@ CLAVE emufs_indice_generar_clave(INDICE *idx, char *data)
                        k.i_clave = *((int *)(data+idx->offset));
                break;
                case IDX_STRING:
+                       /* Tengo que buscar donde empieza el campo */
+                       ptr = data + idx->offset;
+                       c = idx->str_offset;
+
+                       while (c) {
+                               if ((*ptr) == '\0') c--;
+                               ptr++;
+                       }
                        error = 0;
-                       PERR(idx->nombre);
-                       PERR(data+idx->offset);
+                       fprintf(stderr, "%s: ========> %s\n", idx->nombre, ptr);
                        k.i_clave = idx->emu_string->grabar_registro(idx->emu_string,
-                               data+idx->offset,
-                               strlen(data+idx->offset)+1,
+                               ptr,
+                               strlen(ptr)+1,
                                &error
                        );
        }
@@ -214,8 +224,13 @@ int emufs_indice_es_igual(INDICE *idx, CLAVE c1, CLAVE c2)
                case IDX_STRING:
                        error = 0;
                        sc1 = idx->emu_string->leer_registro(idx->emu_string, c1, &dummy, &error);
+                       if (sc1 == NULL) return 0;
                        error = 0;
                        sc2 = idx->emu_string->leer_registro(idx->emu_string, c2, &dummy, &error);
+                       if (sc2 == NULL) {
+                               free(sc2);
+                               return 0;
+                       }
                        /* Salteo el caracter que indica si la clave en temporal */
                        a = b = 0;
                        if (*sc1 == '*') a=1;
index 0a83bc329aa8826e4e02e7039ca2a00056958828..d043ab70f6e894aa8a22ef8001786c3f28efc440 100644 (file)
@@ -54,6 +54,7 @@ typedef struct _indices_h_ {
        INDICE_TIPO_DATO tipo_dato;   /**< Tipo de dato a manejar */
        INDICE_FUNCION funcion;       /**< Funcion del indice */
        int offset;                   /**< Offset desde el inicio del dato hasta el lugar donde esta la clave */
+       int str_offset;               /**< Si el campo es de string, aca va el numero de \0 que me tengo que saltar */
        unsigned int tam_bloque;      /**< Tamaño del bloque (nodo). Deber set multiplo de 512! */
 
        /******NICO********/
@@ -110,7 +111,7 @@ typedef struct _indices_h_ {
  *  \param offset Desplazamiento de la clave dentro del dato
  *  \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);
+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);
 
 /** Destruye un indice
  *
index 2afbd16ddf51ed44671568ef00de764d4b7969d6..81a0487cbb68269cda1b555e41e4a3101f0324f3 100644 (file)
@@ -22,7 +22,7 @@ void imprimir_reg(char* reg, int off, int len)
        CLAVE clave;
        int i;
        memcpy(&clave, reg+off, sizeof(CLAVE));
-       printf("CLAVE = %d\n", clave);
+       printf("CLAVE = %d\n", clave.i_clave);
        printf("REGISTRO =");
        for(i=0; i<len; i++) printf("%c",reg[i]);
                printf("\n");
@@ -39,11 +39,11 @@ int main (int argc,char* argv[])
        EMUFS *emu;
        int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
        EMUFS_REG_SIZE len;
-       int err=0, i;
+       int err=0;
        
        texto = "PARTE COSNSTANTE, clave =";
        emu = emufs_crear("test",T1,512,0);
-       emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo);
+       emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0);
        
        
 /*REGISTRO 1*/ 
index 057579d222a9cee0053869cd9c7bbd0665c5f57f..e4aff57f66e72252549c4d536f402522baa587ca 100644 (file)
@@ -22,7 +22,7 @@ void imprimir_reg(char* reg, int off, int len)
        CLAVE clave;
        int i;
        memcpy(&clave, reg+off, sizeof(CLAVE));
-       printf("CLAVE = %d\n", clave);
+       printf("CLAVE = %d\n", clave.i_clave);
        printf("REGISTRO =");
        for(i=0; i<len; i++) printf("%c",reg[i]);
                printf("\n");
@@ -45,7 +45,7 @@ int main (int argc,char* argv[])
        texto2= "FIN DE REGISTRO DE LONG CONSTANTE LO HAGO MAS LARGO PARA PROBAR CUANDO SE PARTE UN BLOQUE";
        printf("TAMANIO DE LOS REGISTROS = %d\n",strlen(texto)+sizeof(CLAVE)+strlen(texto2));
        emu = emufs_crear("test",T3,512,strlen(texto)+sizeof(CLAVE)+strlen(texto2));
-       emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo);
+       emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0);
        
        
 /*REGISTRO 1*/ 
index a7e16e1021707c34b5227999f1ca2a8dfd9501f8..07b40cc8a40343993303d1845ce14483459171f2 100644 (file)
@@ -112,9 +112,9 @@ t_LstArticulos *art_cargar(t_Parametros *param)
                tmp->fp = emufs_crear("articulos", param->tipo_arch_art, param->tam_bloque_art, sizeof(t_Articulo));
                /* Agrego los indices */
                PERR("Voy a agregar un indice");
-               emufs_agregar_indice(tmp->fp, "presentacion", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(un_articulo, presentacion), 20480);
-               emufs_agregar_indice(tmp->fp, "desc", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), 2048);
-               emufs_agregar_indice(tmp->fp, "codigo", IND_PRIMARIO, IND_B, IDX_INT, 0, 512);
+               emufs_agregar_indice(tmp->fp, "presentacion", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), 512, 1);
+               emufs_agregar_indice(tmp->fp, "desc", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), 512, 0);
+               emufs_agregar_indice(tmp->fp, "codigo", IND_PRIMARIO, IND_B, IDX_INT, 0, 512, 0);
                if (!tmp->fp) {
                        PERR("NO SE PUDO CREAR ARCHIVO ARTICULOS");
                        free(tmp);
@@ -816,6 +816,8 @@ void art_consultas_cambiar_precio(char *s, t_Lista *lista)
        form_agregar_widget(form, INPUT, "Desc. Articulo (nulo==Todos)", 50, "");
        form_agregar_widget(form, INPUT, "Ingrese %", 8, "0");
 
+       werase(lista->win);
+       wrefresh(lista->win);
        form_ejecutar(form, 2, 2);
 
        por = form_obtener_valor_float(form, "Ingrese %");
@@ -864,7 +866,10 @@ void art_consultas_cambiar_precio(char *s, t_Lista *lista)
                                 * borrar sea capaz de eliminar solo el item que corresponde en las
                                 * claves con repeticion
                                 */
+                               PERR("=== MODIFICANDO ===");
+                               fprintf(stderr, "Desc=%s , PVU=%s, Codigo=%d\n", articulo.desc, articulo.pvu, articulo.numero);
                                lst_articulos->fp->modificar_registro(lst_articulos->fp, k1, tmp, size, &error, datos[i]);
+                               PERR("===     FIN     ===");
                        }
                }
                if (datos) free(datos);
index 9951e340d3473233288d6f0018530db6047ab636..4ede2d84efc4ecc2eafd4a90b8642b390c7b211a 100644 (file)
@@ -4,7 +4,7 @@
 <emufs>
        <articulos>
                <fuente>articulos.xml</fuente>
-               <datos tipo="3" bloque="512" />
+               <datos tipo="1" bloque="512" />
                <indices>
                        <indice nombre="codigo" tipo="B" bloque="512" />
                        <indice nombre="desc" tipo="B" bloque="512" />
index a0b529f3f48a877ec9ea92d14735d022f770557d..c3a82ffcb32224d5d887bb3ddc396b0fe452f7ad 100644 (file)
@@ -232,8 +232,8 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                        cant_items = 0;
                }
                tmp->fp = emufs_crear("facturas", param->tipo_arch_fact, param->tam_bloque_fact, sizeof(t_Factura)-sizeof(char *)-sizeof(t_Item*)+cant_items*sizeof(t_Item));
-               emufs_agregar_indice(tmp->fp, "emision", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(factura, emision), 512);
-               emufs_agregar_indice(tmp->fp, "numero", IND_PRIMARIO, IND_B, IDX_INT, 0, 512);
+               emufs_agregar_indice(tmp->fp, "emision", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(factura, emision), 512, 0);
+               emufs_agregar_indice(tmp->fp, "numero", IND_PRIMARIO, IND_B, IDX_INT, 0, 512, 0);
                tmp->fp_texto = emufs_crear("notas", param->tipo_arch_nota, param->tam_bloque_nota, 100);
                for (node=inicio ; node ; node = node->next) {
                        if (node->type == XML_ELEMENT_NODE) {