static void *procesar_guardar_articulo(t_Articulo *src, EMUFS_REG_SIZE *size, t_LstArticulos *lst);
static int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE size, t_LstArticulos *lst);
+/* Manejo de la lista doble */
static t_Reg_Articulo *crear_nodo_articulo(EMUFS_REG_ID reg, unsigned int num);
+static int agregar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo);
t_Reg_Articulo *crear_nodo_articulo(EMUFS_REG_ID reg, unsigned int num)
{
return tmp;
}
+int agregar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo)
+{
+ if (nodo == NULL) return 0;
+
+ if (lst->primero) {
+ lst->primero->ant = nodo;
+ nodo->sig = lst->primero;
+ lst->primero = nodo;
+ } else {
+ lst->primero = nodo;
+ }
+ return 1;
+}
+
t_LstArticulos *art_cargar(const char *filename)
{
xmlDocPtr document;
xmlNode *node, *inicio;
- int cant, error = 0, i, id;
+ int cant, error = 0, i;
EMUFS_REG_SIZE size;
t_LstArticulos *tmp;
lst_articulos = NULL;
- t_Reg_Articulo *reg_nodo;
+ EMUFS_REG_ID id;
tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos));
if (tmp == NULL) return NULL;
/* Ya leido el articulo ahora paso a guardarlo en el archivo y agregarlo a la lista */
save = procesar_guardar_articulo(&art, &size, lst_articulos);
if (save != NULL) {
- reg_nodo = crear_nodo_articulo(tmp->fp->grabar_registro(tmp->fp, save, size, &error), art.numero);
- if (reg_nodo != NULL) {
- if (tmp->primero) {
- tmp->primero->ant = reg_nodo;
- reg_nodo->sig = tmp->primero;
- tmp->primero = reg_nodo;
- } else {
- tmp->primero = reg_nodo;
- }
- }
+ id = tmp->fp->grabar_registro(tmp->fp, save, size, &error);
+ agregar_nodo_articulo(tmp, crear_nodo_articulo(id, art.numero));
free(save);
}
}
/* Leo el registro */
save = tmp->fp->leer_registro(tmp->fp, id, &size, &error);
if (procesar_leer_articulo(&art, save, size, tmp) == 1) {
- reg_nodo = crear_nodo_articulo(id, art.numero);
- if (reg_nodo != NULL) {
- if (tmp->primero) {
- tmp->primero->ant = reg_nodo;
- reg_nodo->sig = tmp->primero;
- tmp->primero = reg_nodo;
- } else {
- tmp->primero = reg_nodo;
- }
- }
+ agregar_nodo_articulo(tmp, crear_nodo_articulo(id, art.numero));
free(save);
}
}
wrefresh(win);
getch();
} else {
- nuevo = crear_nodo_articulo(id, art.numero);
- if (nuevo) {
- if (lst_articulos->primero) {
- lst_articulos->primero->ant = nuevo;
- nuevo->sig = lst_articulos->primero;
- lst_articulos->primero = nuevo;
- } else {
- lst_articulos->primero = nuevo;
- }
- }
+ agregar_nodo_articulo(lst_articulos, crear_nodo_articulo(id, art.numero));
}
free(save);
}
/* Procesa una factura antes de enviarla al archivo para guardarla */
static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size);
+static t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num);
+static int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo);
+
+t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num)
+{
+ t_Reg_Factura *tmp;
+ if (reg == EMUFS_NOT_FOUND) return NULL;
+ tmp = malloc(sizeof(t_Reg_Factura));
+ if (tmp == NULL) return NULL;
+ tmp->sig = tmp->ant = NULL;
+ tmp->num_reg = reg;
+ tmp->texto_reg = texto;
+ tmp->numero = num;
+
+ return tmp;
+}
+
+int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo)
+{
+ if (nodo == NULL) return 0;
+
+ if (lst->primero) {
+ lst->primero->ant = nodo;
+ nodo->sig = lst->primero;
+ lst->primero = nodo;
+ } else {
+ lst->primero = nodo;
+ }
+ return 1;
+}
/* es por cada mes a generar */
#define CANT_FACTURAS 1500
char *fps[6] = {"CO", "CR", "CH"};
void *save;
t_Factura fact;
+ EMUFS_REG_ID id;
lst_facturas = (t_LstFacturas *)malloc(sizeof(t_LstFacturas));
/* Guardo */
save = procesar_guardar_factura(&fact, lst_facturas, &size);
if (save != NULL) {
- lst_facturas->array[cant].numero = numero;
- lst_facturas->array[cant].num_reg = lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size, &error);
+ id = lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size, &error);
+ agregar_nodo_factura(lst_facturas, crear_nodo_factura(id, EMUFS_NOT_FOUND, numero));
+ free(save);
}
}
- lst_facturas->cant = cant;
} else {
/* Cargo un archivo existente */
}
if (l == NULL) return 1;
emufs_destruir(l->fp);
-/* free(l->array); */
free(l);
lst_facturas = NULL;