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);
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);