CFLAGS=-Wall -g -I/usr/include/libxml2 -I../emufs -DDEBUG
LDFLAGS= -lmenu -lncurses -lxml2
+OBJ=form.o gui.o articulos.o facturas.o registros.o ../emufs/libemufs.a
all: gui
-gui: form.c gui.c articulos.c facturas.c registros.c ../emufs/libemufs.a
+gui: $(OBJ)
clean:
@$(RM) -vf *.o gui
return 1;
}
-t_LstArticulos *art_cargar(const char *filename, int tipo)
+t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque)
{
xmlDocPtr document;
xmlNode *node, *inicio;
node = node->next;
}
- tmp->fp = emufs_crear("articulos", tipo-1, sizeof(t_Articulo)*40+128, sizeof(t_Articulo));
+ fprintf(stderr, "bloque = %d\n", tam_bloque);
+ tmp->fp = emufs_crear("articulos", tipo-1, tam_bloque, sizeof(t_Articulo));
for (node=inicio ; node ; node = node->next) {
if (node->type == XML_ELEMENT_NODE) {
if (strcmp(node->name, "ARTICULO") == 0) {
EMUFS *fp; /* Filepointer al archivo donde estan los datos */
} t_LstArticulos;
-t_LstArticulos *art_cargar(const char *filename, int tipo);
+t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_registro);
int art_liberar(t_LstArticulos *l);
t_Articulo *art_obtener(t_LstArticulos *, const char *numero, EMUFS_REG_ID *id);
void art_agregar(char *);
WINDOW *msg_box(WINDOW *win, int w, int h, const char *format, ...);
void msg_box_free(WINDOW *padre, WINDOW *win);
-typedef enum {PARAM_OK, SHOW_HELP, TIPO_NO_DEFINIDO, TIPO_INVALIDO} t_Param;
+typedef enum {PARAM_OK, SHOW_HELP, TIPO_NO_DEFINIDO, TIPO_INVALIDO, BLOQUE_NO_DEFINIDO} t_Param;
/* Verifica Argumentos */
t_Param param_ok(int argc, char *argv[])
if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
/* Luego del archivo XML debe seguir el tipo */
- if ((i+2)<argc) {
+ if ((i+1)<argc) {
n = atoi(argv[i+1]);
if ((n < 1) || (n > 3)) return TIPO_INVALIDO;
+ if (((n == 1) || (n == 3)) && ((i+2)>=argc))
+ return BLOQUE_NO_DEFINIDO;
} else {
/* Ops, no hay mas parametros */
return TIPO_NO_DEFINIDO;
print_help(argv[0]);
return 0;
case TIPO_NO_DEFINIDO:
- printf("Falta parámetro requerido. Luego del nombre del archivo debe especificar el tipo de archivo\n");
+ printf("Falta parámetro requerido.\nLuego del nombre del archivo debe especificar el tipo de archivo\n");
+ return 1;
+ case BLOQUE_NO_DEFINIDO:
+ printf("Falta parámetro requerido.\nLuego del tipo de archivo debe especificar el tamaño del bloque a utilizar\n");
return 1;
case TIPO_INVALIDO:
printf("Tipo de archivo no valido. Los valores posibles para el tipo de archivo son:\n");
wrefresh(stdscr);
dialog = msg_box(stdscr, COLS, LINES, "Generando archivos ...");
- if (argc == 3) {
- art_cargar(argv[1], atoi(argv[2]));
+ if (argc == 4) {
+ art_cargar(argv[1], atoi(argv[2]), atoi(argv[3]));
fact_cargar(argv[1]);
} else
- art_cargar(NULL, -1);
+ art_cargar(NULL, -1, -1);
msg_box_free(stdscr, dialog);
EMUFS *fp;
int pos_actual, ancho_registro, offset, pos;
fp = emufs_abrir("articulos");
+ wattron(padre, COLOR_PAIR(COLOR_BLUE));
+ mvwaddstr(padre, 0, 0, "Tipo de archivo : ");
+ wattroff(padre, COLOR_PAIR(COLOR_BLUE));
switch (fp->tipo) {
case T1:
- case T2:
+ waddstr(padre, "Registro variable con bloque parametrizado.");
procesar = procesar_registro_articulo_tipo1;
break;
+ case T2:
+ waddstr(padre, "Registro variable sin bloques.");
+ break;
case T3:
procesar = procesar_registro_articulo_tipo3;
+ waddstr(padre, "Registro fijo con bloque parametrizado.");
}
total_indice = emufs_idx_get_count(fp);
- ant_indice = 1;
+ ant_indice = 0;
data = (char *)fp->leer_registro_raw(fp, emufs_idx_get_id_at(fp, ant_indice), &size, &pos_actual);
data = procesar(fp, data, &size, &pos_actual, &ancho_registro);
curs_set(0);
- mostrar_info(padre, h, actual_ancho);
+ mostrar_info(padre, h, offset_alto);
mvwaddnstr(actual[1], 0, 0, data, pos_actual);
wattron(actual[1], A_BOLD);
total_indice = emufs_idx_get_count(fp);
/* Tengo que re-pintar algunas cosas */
- mostrar_info(padre, h, actual_ancho);
+ mostrar_info(padre, h, offset_alto);
box(actual[0], 0, 0);
wrefresh(actual[0]);
break;
data = procesar(fp, data, &size, &pos_actual, &ancho_registro);
/* Tengo que re-pintar algunas cosas */
- mostrar_info(padre, h, actual_ancho);
+ mostrar_info(padre, h, offset_alto);
box(actual[0], 0, 0);
wrefresh(actual[0]);
break;