comiteo esto porque no se si estoy yendo por el buen camino con la doc, me puse a comentar las funciones principales pero eme di cuenta que es un poco redundante con lo que pueda llegar a salir del doxygen, aceptio todo tipo de criticas
* BUGFIX : procesar_guardar_factura grababa mal
* BUGFIX : leer_items no leia si el tipo de archivo era variable
* Completo : Completo Ver Registros para factura para cualquier tipo de archivo.
Se termina el fatidico tipo1.
Hay varios cambios:
- Vuela la funcion grabar_registro_con_id(), no tenia sentido porque, como en
modificar(), si borro un registro y lo grabo inmediatamente conserva el id.
- grabar_registro() es ahora mas inteligente, permitiendo a compactar() ser mas
estupida.
Basicamente ahora grabar_registro() maneja mejor los registros multibloque,
usando la nueva funcion fsc_buscar_n_lugares(). Ahora si hay un hueco en el
medio del archivo con N bloques libres (siendo N la cantidad de bloques que
necesita mi registro), lo aprovecha e inserta ahi.
- compactar() se limita entonces al siguiente (y estupido) algoritmo:
Por cada registro en el archivo: 1- Lee el registro.
2- Borra el registro.
3- Graba registro.
Con la inteligencia de grabar_registro() es todo lo que necesito.
Con las pruebas simples todo parece andar pipon.
* Se agrega generador de facturas. Primero hay que correr el generador de articulos
que deja un archivo txt con datos que se van a usar. Las notas son sacadas
de un archivo llamado nota.txt.
Faltan un par de campos. Los subo en 5 minutos.
Los datos cumplen con la relacion de % pedidos en el enunciado.
Alan Kennedy [Sat, 17 Apr 2004 18:48:12 +0000 (18:48 +0000)]
Ahora si, recompactacion finalizada. Se me habia cagado un file de anoche para hoy cuando hize un svn up y estaba mal la insersion de GAPS (no la hacia ordenada), ergo mi recompactar se volvia loco
Luca, leer_registro de tipo1 anda mal cuando tengo mas de un bloque en un registro!
Creo que te estas olvidando de saltar el header de los registros siguientes.
si hubiera una materia que se llame boludos atomicos a mi me la dan por aprobada sin cursar.... me faltaba generar el nombre del archivo, por eso no truncaba
* Agrego programa para generar archivo de articulos.
- Para hacerlo mas lindo, hay que agregar mas datos en los
diccionario ;-) ...
marcas.txt : Marcas de productos
productos.txt : Nombre de productos
presentacion.txt : formas en que pueden venir productos.
Agreguen a gusto!!. Tengan en cuenta que la descripcion se arma
con un producto y con una marca. No se preocupen por que queden
cosas poco logicas como (Yerba mate Coca Cola), porque no importa.
* Pongo un XML de 2000 articulos como ejemplo.
* Se agregan compactar facturas y notas (notas no estoy seguro de tener
que ponerlo, ya que compactar notas puede modificar los IDs y se cagan
las facturas. Ya lo pregunte. Veremos!)
* Termino el manejo de parametros desde la linea de comandos. Falta
pulir la verificacion de cuando uso emufs_abrir que realmente
abra algo que existe.
gui -h o --help para ver la ayuda.
GUI 99% terminada, faltan 5 o 6 detalles. Me pongo a laburar en el generador
de articulos y facturas que se necesita para el informe.
* Se realiza una limpieza en gui.c. Ahora hay una unica rutina de
manejo de menu, en lugar de 1 para cada vez que la necesitaba :-)
* Se crean 2 lindas macros para simplificar la creacion del menu.
* Se pone todo al dia.
Primer intento de compactar(). Parece andar bien lo que esta implementado. Falta
truncar el archivo a los bloques realmente usados y manejar los registros
multibloque.
Para esto se crea grabar_registro_con_id() que es igual a grabar_registro() pero
se le puede pasar un id arbitrario (para conservar el id). grabar_registro() es
ahora un wrapper a grabar_registro_con_id().
Tambien se hace una funcion para obtener la longitud del archivo, aunque al
final la usa solo leer_estadisticas().
Impelentacion de compactar terminada pero NO ESTA TESTEADA del todo..
hice solo un par de pruebas.
En esta misma funcion tuve un quilombo con un fclose, que se me hace que es porque el archivo ya estaba cerrado, asi que lo saque y le dejo la tarea al sistema operativo :-P
me voy a poner a testear lo mas que pueda para despues empezar a documentar.
- Se agrega leer_estadisticas().
- Se agrega chequeo en emufs_crear() para que no se pueda crear un archivo con
bloque mas chico que 2 * sizeof(cabecera de registro).
* BUGFIX : cuando se recreaba con otro formato el archivo de
articulos faltaba cambiar el campo nombre para que quede
consistente. Ahora se puede pasar de un tipo a otro y a otro
tantas veces que se quiera.
* BUGFIX : EN idx_get faltaba un sizeof(EMUFS_REG_ID) (aunque el valgrind se sigue quejando)
* tipo_leer_raw retocada.
* Algunas cosa en GUI que no recuerdo
Se implementa borrar_registro en tipo1. Soporta registros mas grandes que el
bloque. Lo unico que falta es alinear a izquiera los registros del bloque
modificado (si hubiera registros a la derecha del registro borrado).
Hay algo en leer que falla y ademas hay un if ( cant_bloques == 0 ) que no me gusta, porque tendria que ser 1, pero con cero anda mejor ... ademas con bloques de 54 para abajo se cuelga, ni idea por que.. busco..
Bueno, por lo pronto parece que anda todo bien...
Faltaria dedicarle un tiempo de testing pero lo probe en la gui y se ve bastante cariñoso.
Espero que no falle.
Puede ser que queden cosas raras en el archivo de espacios libres. Pero en los otros queda todo pipon.
* Bugfix : se rellena con * antes de leer un registro de tipo
variable, asi cuando se pasa a registro fijo se ve lindo.
Prueba que hice con existo :
#> gui articulos.xml 1 333 2> /dev/null
Ir a Ver Registros
Ir a Mantenimiento -> Cambiar Archivo Articulos
Elejir tipo 3 (Tamaño de boque 222)
Ir a Ver Registros.
* Bugfix en tipo1 leer_raw que se estaba usando una variable
block_size salida de la galera y sin inicializar. Vuelve a andar
(falta agregar soporte multiples bloques)
* Bugfix en idx_get para saltar los registros no utilizados
* Bugfix en tipo 3 para mandar mensajes por stderr
* Agrego "compactar" en EMUFS
* Agrego en GUI menu mantenimiento, que implementa el compactar y
cambio de organizacion en archivos.
Este ultimo no esta andando bien, fallan los leer de todos los tipos de datos.
Como se puede ver en los archivos temporales, los .idx suelen quedar
vacios en algunos casos! ... hay que revisar bien esas cosas.
Se generaliza el algoritmo de leer_registro(). Ahora, al igual que
grabar_registro() no necesita tratar distinto un registro que ocupa mas de un
bloque.
Alan Kennedy [Fri, 16 Apr 2004 06:50:06 +0000 (06:50 +0000)]
Recompactacion Tipo 2 al 80%. Ya recompacta y toda la bola, lo unico que le falta es modificar los offsets en el indice (.idx), donde quedan los regs luego de la recompactacion. TODO tomorrow apenas toque casa.
hice unos pequeños cambios en fsc e idx pero no creo que afecte en nada a los otros tipos
-en fsc el agregar primero se fija si el bloque existe y si no existe lo agrega al final
-en idx... ya no me acuerdo que cambie.. puede ser que haya quedado igual..
* Al procesar se truncaba el tamaño del bloque para tipo1. Ahora
muestra el bloque entero como debe ser. Probe hasta con bloques de
5000 y al parece anda.
* Para tipo3 hay algo raro que no anda bien. No puedo poner bloques
de mas de 500, y siempre me aparece alguna basura luego de cada registro (tal
vez por la alineacion de memoria ?!)
por lo pronto parece que anda, hice un par de pruebas y anduvo jamon, pero me queda la duda si me esta devovliendo bien un nuevo id despues de haber borrado un registro, pero como en la gui anda no debe estar mal
* BUGFIXES en tipo3 :
- En grabar registro se estaba agregando a IDX el numero de bloque del ultimo
bloque ocupado en lugar del primero (para el caso de reg > block)
- El caso de cant_bloques == 1 decia cant_bloques == 0
* Se actualiza tipo3_leer_raw para leer registros de muchos bloques
* La GUI se pone al dia con tipo3 y ahora en pantalla se muestran correctamente
los registros que ocupan mas de 1 bloque (se pone <> para indicar el cambio de bloque)
Alan Kennedy [Thu, 15 Apr 2004 05:37:43 +0000 (05:37 +0000)]
emufs.h comente los campos de stats en doxy, fsc.h/c agregue la funcion para obtener la media de FSC (Nico usa esa y saca lo tuyo interno) y tambien la descomente/probe la funcion get_max_min_fsc que hizo nico. Me faltan de stats solo cantidad de registros y bytes de info de control (sale con la cant de registros). Pendiente porque cambia el API de IDX y al pedo hacerlo con lo de ahora.
Soporte para bloques pequeños en leer y guardar, falta borrar pero como estoy quemado lo dejo para mañana. Ademas mañana supongo que tendre que arreglar los cambios que se produzcan en idx y los demas, si es que hay. Por ahora no funciona con la gui el tema de los bloques chicos asi que no se molesten en probarlo, pero si en revisarlo. Adios
* Muestro el tipo de archivo que se esta mirando en Ver Registros
* Agrego otro parametro a la GUI : el tamaño de bloque. Ahora
si el archivo es T1 o T3 la GUI obliga a pasar por parametro
el tamaño de registro que se desea para la creacion del archivo.
* Se inicializa bloque en \0's al crear un nuevo bloque en tipo1
* Ver registros ahora sirve tanto para tipo1 como para tipo3 (tipo1 no puede
modificar ni borrar hasta que borrar_registro sea implementada)
* Ver registros completo!!. Ya se puede :
- hace altas, bajas y modificaciones del registro actualmente selecciondo
- Resalta el registro actual dentro del bloque al que pertenece
- Tiene GUI autoexplicada
* Agrego leer_registro_raw en EMUFS y para tipo3
* En tipo3 hago que cuando se crea un nuevo bloque se lo pone
todo en 0 (asi la GUI se ve mejor). Tambien arreglo un bug
en el que al borrar se estaba haciendo un desplazamiento de mas.
* Agrego un msg de advertencia a la GUI si se compila con -DDEBUG, para prevenir
al usuario de redirigir el flujo stderr a un archivo por posibles problemas
entre curses y fprintf
* Mejoro parser de opciones
* Se agregan a tipo123 los metodos emufs_tipoX_modificar_registro
* Se ajustan punteros dentro de EMUFS en los inicializar
* TODO : Tipo1 modificar no anda por faltante de tipo1_borrar!!
(lo pongo para que no esten como yo 1 hora sin saber por que
se cuelga :-D)