#include <string.h>
#include <stdarg.h>
+#include "gui.h"
#include "menu.h"
#include "form.h"
#include "articulos.h"
void menu_facturas();
void menu_mantenimiento();
void menu_estadisticas();
+void menu_ver_registros();
+void menu_ver_bloques();
void preguntar_nuevo_tipo(int *tipo, int *tam_bloque, int *tam_reg);
void ver_estadisticas(EMUFS *fp);
-/* cuadro de msg. w y h son de la ventana padre */
-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, BLOQUE_NO_DEFINIDO} t_Param;
+typedef enum {
+ PARAM_OK, /* Parametros estan ok */
+ NO_ART_FILE, /* No se especifico nombre de archivo Articulos */
+ NO_FACT_FILE, /* No se especifico nombre de archivo Facturas */
+ SHOW_HELP, /* Mostrar ayuda encontrado */
+ TIPO_NO_DEFINIDO, /* No se definio tipo de archivo */
+ TIPO_INVALIDO, /* El valor de tipo de archivo no es valido */
+ BLOQUE_NO_DEFINIDO, /* No se especifico tamaño de bloque */
+ NULL_BLOCK_FOUND /* Tamaño de bloque <= 0!!! */
+} t_Param;
+
+struct _mis_param_ {
+ int xml_fact; /* Pos en argv del archivo XML a usar para facturas */
+ int xml_art; /* Pos en argv del archivo XML a usar para articulos */
+ char tipo_arch_fact; /* Tipo de archivo para Facturas */
+ char tipo_arch_art; /* Tipo de archivo para Articulos */
+ EMUFS_BLOCK_SIZE tam_bloque_fact;
+ EMUFS_BLOCK_SIZE tam_bloque_art;
+} parametros;
/* Verifica Argumentos */
t_Param param_ok(int argc, char *argv[])
for(i=1; i<argc; i++) {
if ((strcmp(argv[i], "-h")==0) || (strcmp(argv[i], "--help")==0)) return SHOW_HELP;
- if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
- /* Luego del archivo XML debe seguir el tipo */
- 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;
+ if (strcmp(argv[i], "-a") == 0) { /* Articulos! */
+ i++;
+ if (i >= argc) return SHOW_HELP;
+ if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
+ /* Luego del archivo XML debe seguir el tipo */
+ 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;
+ parametros.tipo_arch_art = n;
+ parametros.tam_bloque_art = atoi(argv[i+2]);
+ if (parametros.tam_bloque_art <= 0) return NULL_BLOCK_FOUND;
+ parametros.xml_art = i;
+ } else {
+ /* Ops, no hay mas parametros */
+ return TIPO_NO_DEFINIDO;
+ }
} else {
- /* Ops, no hay mas parametros */
- return TIPO_NO_DEFINIDO;
+ return NO_ART_FILE;
}
- }
+ } /* Articulos */
+
+ if (strcmp(argv[i], "-f") == 0) { /* Facturas! */
+ i++;
+ if (i >= argc) return SHOW_HELP;
+ if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
+ /* Luego del archivo XML debe seguir el tipo */
+ 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;
+ parametros.tipo_arch_fact = n;
+ parametros.tam_bloque_fact = atoi(argv[i+2]);
+ if (parametros.tam_bloque_fact <= 0) return NULL_BLOCK_FOUND;
+ parametros.xml_fact = i;
+ } else {
+ /* Ops, no hay mas parametros */
+ return TIPO_NO_DEFINIDO;
+ }
+ } else {
+ return NO_FACT_FILE;
+ }
+ } /* Facturas */
+
}
-
return PARAM_OK;
}
void print_help(char *s)
{
printf("EMUFS - 1v0\n");
- printf("Modo de uso : %s [<archivo articulos XML> tipo=[1|2|3]]\n", s);
- printf("\nSi especifica un archivo XML desde donde cargar los articulos debera tambien especificar el tipo");
- printf(" de archivo a crear, siendo 1, 2, 3\n");
+ printf("Modo de uso : %s [-[f|a] <archivo articulos XML> tipo [tamaño bloque]] \n", s);
+ printf(" -f indica que lo que está a continuación seran los datos para generar el archivo de facturas.\n");
+ printf(" -a indica que lo que está a continuación seran los datos para generar el archivo de articulos.\n");
+ printf(" 'tipo' es el modo de archivo. Siendo :\n");
+ printf(" 1 - Registros long. variables con bloque parametrizado\n");
+ printf(" 2 - Registros long. variables sin bloque\n");
+ printf(" 3 - Registros long fija con bloque parametrizado\n");
+ printf(" tamaño bloque debe ser especificado solo en aquellos tipos que lo requiera.\n");
}
int main(int argc, char *argv[])
int c, fin=0;
WINDOW *dialog;
+ parametros.xml_art = parametros.xml_fact = -1;
switch (param_ok(argc, argv)) {
case SHOW_HELP:
print_help(argv[0]);
printf("\t2 - Archivo de registros variables sin bloques.\n");
printf("\t3 - Archivos de bloque parametrizado y registro de long. parametrizada.\n");
return 2;
+ case NO_ART_FILE:
+ printf("Falta parámetro requerido.\nHa utilizado el modificador -a para crear los articulos a partir de un XML pero no ha especificado ningún archivo XML.\n");
+ return 3;
+ case NO_FACT_FILE:
+ printf("Falta parámetro requerido.\nHa utilizado el modificador -f para crear las facturas a partir de un XML pero no ha especificado ningún archivo XML.\n");
+ return 3;
+ case NULL_BLOCK_FOUND:
+ printf("Error de parámerto.\nHa ingresado un valor nulo como tamaño de bloque.\n");
+ return 4;
case PARAM_OK:
fin = 0;
}
wrefresh(stdscr);
dialog = msg_box(stdscr, COLS, LINES, "Generando archivos ...");
- if (argc == 4) {
- art_cargar(argv[1], atoi(argv[2]), atoi(argv[3]));
- if (!fact_cargar("facturas.xml", 1, 400))
- fprintf(stderr, "ERROR CARGANDO FACTURAS\n");
- } else
+
+ if (parametros.xml_art != -1) {
+ art_cargar(argv[parametros.xml_art], parametros.tipo_arch_art, parametros.tam_bloque_art);
+ } else {
art_cargar(NULL, -1, -1);
+ }
+ if (parametros.xml_fact != -1) {
+ fact_cargar(argv[parametros.xml_fact], parametros.tipo_arch_fact, parametros.tam_bloque_fact);
+ } else {
+ fact_cargar(NULL, -1, -1);
+ }
msg_box_free(stdscr, dialog);
menu_facturas();
break;
case 2:
- dialog = derwin(stdscr, LINES-4, COLS-2, 2, 1);
- ver_registros(dialog, COLS-2, LINES-4);
- werase(dialog);
- wrefresh(dialog);
- delwin(dialog);
- refresh();
+ menu_ver_registros();
break;
- case 5:
+ case 3:
+ menu_ver_bloques();
+ break;
+ case 4:
menu_estadisticas();
break;
- case 6:
+ case 5:
menu_mantenimiento();
break;
- case 7:
+ case 6:
fin = 1;
break;
}
}
}
+void menu_ver_registros()
+{
+ MENU(mi_menu) {
+ MENU_OPCION("Articulos", "Ver registros del archivo de Articulos."),
+ MENU_OPCION("Facturas", "Ver registros del archivo de Facturas."),
+ MENU_OPCION("Notas", "Ver registros del archivo de Notas."),
+ MENU_OPCION("Volver", "Ir al menu anterior.")
+ };
+ int opt;
+ WINDOW *dialog;
+
+ while ((opt = menu_ejecutar(mi_menu, 4, "Menu Ver Registros")) != 3) {
+ switch (opt) {
+ case 0:
+ dialog = derwin(stdscr, LINES-4, COLS-2, 2, 1);
+ ver_registros(dialog, COLS-2, LINES-4, 0);
+ werase(dialog);
+ wrefresh(dialog);
+ delwin(dialog);
+ refresh();
+ break;
+ case 1:
+ dialog = derwin(stdscr, LINES-4, COLS-2, 2, 1);
+ ver_registros(dialog, COLS-2, LINES-4, 1);
+ werase(dialog);
+ wrefresh(dialog);
+ delwin(dialog);
+ refresh();
+ /* break; */
+ /* case 2: */
+ }
+ }
+}
+
+void menu_ver_bloques()
+{
+ MENU(mi_menu) {
+ MENU_OPCION("Articulos", "Ver bloques del archivo de Articulos."),
+ MENU_OPCION("Facturas", "Ver bloques del archivo de Facturas."),
+ MENU_OPCION("Notas", "Ver bloques del archivo de Notas."),
+ MENU_OPCION("Volver", "Ir al menu anterior.")
+ };
+ int opt;
+ WINDOW *dialog;
+
+ while ((opt = menu_ejecutar(mi_menu, 4, "Menu Ver Bloques")) != 3) {
+ switch (opt) {
+ case 0:
+ dialog = derwin(stdscr, LINES-4, COLS-2, 2, 1);
+ ver_bloques(dialog, COLS-2, LINES-4, 0);
+ werase(dialog);
+ wrefresh(dialog);
+ delwin(dialog);
+ refresh();
+ break;
+ case 1:
+ dialog = derwin(stdscr, LINES-4, COLS-2, 2, 1);
+ ver_bloques(dialog, COLS-2, LINES-4, 1);
+ werase(dialog);
+ wrefresh(dialog);
+ delwin(dialog);
+ refresh();
+ break;
+ case 2:
+ dialog = derwin(stdscr, LINES-4, COLS-2, 2, 1);
+ ver_bloques(dialog, COLS-2, LINES-4, 2);
+ werase(dialog);
+ wrefresh(dialog);
+ delwin(dialog);
+ refresh();
+ }
+ }
+}
+
int main_menu()
{
MENU(mi_menu) {
MENU_OPCION("Articulos","Alta,baja,consulta y modificacion de articulos."),
MENU_OPCION("Facturas","Alta,baja,consulta y modificacion de facturas."),
- MENU_OPCION("Ver Registros","Ver registros/bloques de archivo Articulos."),
- MENU_OPCION("Ver Facturas","Ver registros/bloques de archivo Facturas."),
- MENU_OPCION("Ver Notas","Ver registros/bloques de archivo Notas."),
+ MENU_OPCION("Ver Registros","Ver registros (en su contexto) de los archivos ."),
+ MENU_OPCION("Ver Bloques","Ver bloques (en su contexto) de los archivos."),
MENU_OPCION("Estadisticas","Ver estadisticas de ocupacion de archivos."),
MENU_OPCION("Mantenimiento","Tareas de mantenimiento de los archivos."),
MENU_OPCION("Salir", "Salir del sistema.")
};
- return menu_ejecutar(mi_menu, 8, "Menu Principal");
+ return menu_ejecutar(mi_menu, 7, "Menu Principal");
}
while ((opt = menu_ejecutar(mi_menu, 7, "Menu Mantenimiento")) != 6) {
switch (opt) {
case 0:
+ dlg = msg_box(stdscr, COLS, LINES, "Compactando archivo.... Aguarde");
art_get_lst()->fp->compactar(art_get_lst()->fp);
+ msg_box_free(stdscr, dlg);
break;
case 1:
+ dlg = msg_box(stdscr, COLS, LINES, "Compactando archivo.... Aguarde");
fact_get_lst()->fp->compactar(fact_get_lst()->fp);
+ msg_box_free(stdscr, dlg);
break;
case 2:
+ dlg = msg_box(stdscr, COLS, LINES, "Compactando archivo.... Aguarde");
fact_get_lst()->fp_texto->compactar(fact_get_lst()->fp_texto);
+ msg_box_free(stdscr, dlg);
break;
case 3:
nuevo_tam_registro = -1; /* No permito cambiar el tamaño de registro */
stats = fp->leer_estadisticas(fp);
win = newwin(LINES-4, COLS-2, 2, 1);
-
+ curs_set(0);
+
+ wattron(win, COLOR_PAIR(COLOR_YELLOW));
+ wattron(win, A_BOLD);
mvwaddstr(win, 1, 1, "Tipo de Archivo : ");
+ wattroff(win, A_BOLD);
+ wattroff(win, COLOR_PAIR(COLOR_YELLOW));
switch (fp->tipo) {
case T1:
waddstr(win, "Registro long. variable con bloque parametrizado");
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de bloque : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", fp->tam_bloque);
+ waddstr(win, s);
break;
case T2:
waddstr(win, "Registro long. variable sin bloques");
break;
case T3:
waddstr(win, "Registro long. fija con bloque parametrizado");
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de bloque : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", fp->tam_bloque);
+ waddstr(win, s);
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de registro : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", fp->tam_reg);
+ waddstr(win, s);
}
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Cant. Registros : ");
+ wattroff(win, A_BOLD);
sprintf(s, "%lu", stats.tam_archivo);
waddstr(win, s);
- mvwaddstr(win, i++, 1, "Tamaño de Archivo (bytes) : ");
- sprintf(s, "%lu", stats.tam_archivo_bytes);
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de Archivo : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.tam_archivo_bytes);
waddstr(win, s);
- mvwaddstr(win, i++, 1, "Tamaño de Info de Control (bytes) : ");
- sprintf(s, "%lu", stats.info_control);
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de Info de Control : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.info_control);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Media de espacio libre : ");
- sprintf(s, "%lu", stats.media_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes/bloque", stats.media_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Espacio Libre : ");
- sprintf(s, "%lu", stats.total_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.total_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Maximo de Espacio libre : ");
- sprintf(s, "%lu", stats.max_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.max_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Minimo de Espacio libre : ");
- sprintf(s, "%lu", stats.min_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.min_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Cantidad de bloques : ");
+ wattroff(win, A_BOLD);
sprintf(s, "%lu", stats.cant_bloques);
waddstr(win, s);
+
+ wattron(win, A_BLINK);
+ mvwaddstr(win, i+2, 1, "Presione una tecla para continuar.");
+ wattroff(win, A_BLINK);
+
+ wrefresh(win);
+ getch();
werase(win);
wrefresh(win);
delwin(win);