no se emiten warnings.
* Modifico la navegabilidad de treev_view para que sea mas estricta en la forma
de navegar los nodos.
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);
+#ifdef TP_PRIMER_ENTREGA
/* 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);
static int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo);
-t_LstArticulos *art_get_lst()
-{
- return lst_articulos;
-}
-
int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo)
{
if (nodo == NULL) return 0;
}
return 1;
}
+#endif /* TP_PRIMER_ENTREGA */
+
+t_LstArticulos *art_get_lst()
+{
+ return lst_articulos;
+}
t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque)
{
t_LstArticulos *tmp;
t_Articulo *un_articulo;
lst_articulos = NULL;
- EMUFS_REG_ID id;
tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos));
if (tmp == NULL) return NULL;
save = procesar_guardar_articulo(&art, &size, lst_articulos);
if (save != NULL) {
error = 0;
- id = tmp->fp->grabar_registro(tmp->fp, save, size, &error);
- agregar_nodo_articulo(tmp, crear_nodo_articulo(id, art.numero));
+ tmp->fp->grabar_registro(tmp->fp, save, size, &error);
free(save);
}
}
static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE *size);
static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, t_LstFacturas *lst);
+#ifdef TP_PRIMER_ENTREGA
/* Manejo de la lista en memoria */
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);
int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo);
+#endif
/* Funciones para carga desde el XML */
static t_Item *leer_items(xmlNode *, int *cant, int size);
return s;
}
+#ifdef TP_PRIMER_ENTREGA
int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo)
{
if (nodo == NULL) return 0;
}
return 1;
}
+#endif /*TP_PRIMER_ENTREGA*/
t_Item *leer_items(xmlNode *node, int *cant, int size)
{
{
WINDOW *win, *items, *nota, *subnota;
t_Form *form, *form_nota;
- t_Reg_Factura *nodo;
t_Factura *fact;
EMUFS_REG_SIZE size;
EMUFS_REG_ID id, id_texto;
t_Item *its = NULL;
t_Factura fact;
EMUFS_REG_SIZE size;
- EMUFS_REG_ID id, id_texto;
+ EMUFS_REG_ID id_texto;
int y_actual, cant, error;
char *entrada;
if (entrada) {
error = 0;
lst_facturas->fp->grabar_registro(lst_facturas->fp, entrada, size, &error);
- agregar_nodo_factura(lst_facturas, crear_nodo_factura(id, id_texto, fact.numero));
free(entrada);
}
char *nodo;
char tmp[100];
int i;
+ int posibles_proximos[100];
int proximo;
if (id == -1) return 0;
+ memset(posibles_proximos, -1, sizeof(int)*100);
do {
y = 0;
mvwaddstr(win, y++, 0, "Nombre : ");
claves[i].dato.bloque,*/
claves[i].hijo_derecho
);
+ posibles_proximos[i] = claves[i].hijo_derecho;
waddstr(win, tmp);
}
+ posibles_proximos[i++] = header.hijo_izquierdo;
free(nodo);
wrefresh(win);
form_agregar_widget(form, INPUT, "Ver (-1 para volver)", 4, "");
form_ejecutar(form, 0, h-2);
proximo = form_obtener_valor_int(form, "Ver (-1 para volver)");
- werase(win);
- wrefresh(win);
- emufs_indice_b_ver(idx, win, w, h, proximo);
+
+ /* Verifico que proximo sea un hijo */
+ /* +1 por el hijo izquierdo */
+ if (proximo != -1) {
+ for(i=0; i<header.cant+1; i++) {
+ if (posibles_proximos[i] == proximo) break;
+ }
+
+ if (i>=(header.cant+1)) proximo = id; /* Si no es un nodo valido, lo anulo*/
+ }
+
+ /* Solo voy a otro nodo si no soy el mismo */
+ if (proximo != id) {
+ werase(win);
+ wrefresh(win);
+ emufs_indice_b_ver(idx, win, w, h, proximo);
+ }
} while (proximo != -1);
werase(win);
wrefresh(win);
+ return 0;
}