From: Ricardo Markiewicz Date: Thu, 8 Apr 2004 21:36:27 +0000 (+0000) Subject: * Ajustes pequeños al codigo. X-Git-Tag: svn_import_r684~604 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/6e3d570b2e409f486e718aa98f2ffc3741362c8e?ds=inline * Ajustes pequeños al codigo. --- diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 8480a3f..8e53638 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -65,7 +65,7 @@ t_LstArticulos *art_cargar(const char *filename) for ( ; node ; node = node->next) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "ARTICULO") == 0) { - strncpy(tmp->array[cant].numero, xmlGetProp(node, "NroArtículo"), 8); + tmp->array[cant].numero = atoi(xmlGetProp(node, "NroArtículo")); strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripción"), 50); strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentación"), 30); strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8); @@ -103,7 +103,7 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) if (lst == NULL) lst = lst_articulos; for(i=0; icant; i++) { - j = atoi(lst->array[i].numero); + j = lst->array[i].numero; if (n == j) return &lst->array[i]; } @@ -130,6 +130,7 @@ void art_modificar(char *s) WINDOW *win; t_Form *form; t_Articulo *articulo; + char num[8]; win = newwin(8, 68, 13, 1); box(win, 0, 0); @@ -139,7 +140,8 @@ void art_modificar(char *s) if (articulo != NULL) { form = form_crear(win); - form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero); + sprintf(num, "%07d", articulo->numero); + form_agregar_widget(form, INPUT, "Numero de Artículo", 8, num); form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc); form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion); form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia); diff --git a/emufs_gui/articulos.h b/emufs_gui/articulos.h index 3e35b80..2957c3b 100644 --- a/emufs_gui/articulos.h +++ b/emufs_gui/articulos.h @@ -24,7 +24,7 @@ typedef struct _articulo_ { unsigned int idREG; /* Registro Fisico donde esta guardado */ - char numero[9]; + int numero; char desc[51]; char presentacion[31]; char existencia[9]; diff --git a/emufs_gui/form.c b/emufs_gui/form.c index a97e3ba..5a76a4d 100644 --- a/emufs_gui/form.c +++ b/emufs_gui/form.c @@ -38,16 +38,21 @@ static int form_radio(WINDOW *win, int x, int y, t_Widget *w); t_Form *form_crear(WINDOW *win) { t_Form *tmp = (t_Form *)malloc(sizeof(t_Form)); + if (tmp == NULL) { + return NULL; + } tmp->primero = tmp->ultimo = NULL; tmp->win = win; - /* TODO : El error se debe verificar afuera? */ return tmp; } int form_destruir(t_Form *f) { - t_Widget *tmp = f->primero; + t_Widget *tmp; + if (f == NULL) return 0; + + tmp = f->primero; while (tmp) { f->primero = f->primero->sig; @@ -62,6 +67,8 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i { t_Widget *tmp = NULL; + if (f == NULL) return; + /* Creo el nuevo widget segun el tipo */ switch (tipo) { case INPUT: @@ -87,7 +94,8 @@ void form_ejecutar(t_Form *f, int x, int y) int offset = 0, my_y, salida; t_Widget *tmp = f->primero; my_y = y-1; - /* Pongo las etiquetas de los campos, y me fijo el mayor offset */ + + /* Calculo cual es la etiqueta más larga de FORM */ while (tmp) { my_y++; if (strlen(tmp->nombre) > offset) @@ -100,11 +108,13 @@ void form_ejecutar(t_Form *f, int x, int y) tmp = f->primero; my_y = y-1; + /* Agrego el etiqueta y el valor actual para cada elemento */ while (tmp) { ++my_y; mvwaddstr(f->win, my_y, x, tmp->nombre); waddch(f->win, ':'); waddch(f->win, ' '); + /* TODO : VER QUE SI ES UNA OPCION ES DISTINTO!! */ mvwaddstr(f->win, my_y, x+offset, tmp->valor); tmp = tmp->sig; } @@ -112,6 +122,7 @@ void form_ejecutar(t_Form *f, int x, int y) tmp = f->primero; my_y = y-1; + /* Ejecuto el formulario */ while (tmp) { ++my_y; wmove(f->win, my_y, x+offset); @@ -156,12 +167,23 @@ t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max { t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget)); + if (tmp == NULL) return NULL; + tmp->tipo = tipo; tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1)); + if (tmp->nombre == NULL) { + free(tmp); + return NULL; + } strcpy(tmp->nombre, nombre); tmp->max = max; tmp->valor = (char *)malloc(sizeof(char)*(max+1)); + if (tmp->valor == NULL) { + free(tmp->nombre); + free(tmp); + return NULL; + } tmp->valor[0] = '\0'; strncpy(tmp->valor, defecto, max); @@ -176,13 +198,26 @@ t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max { int ini, fin, actual; t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget)); + if (tmp == NULL) { + return NULL; + } tmp->tipo = tipo; tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1)); + if (tmp->nombre == NULL) { + free(tmp); + return NULL; + } strcpy(tmp->nombre, nombre); tmp->max = max; tmp->opciones = (char **)malloc(sizeof(char*)*(max)); + if (tmp->opciones == NULL) { + free(tmp->nombre); + free(tmp); + return NULL; + } + /* Parseo VALOR separado por comas */ actual = ini = 0; fin = ini+1; @@ -212,6 +247,8 @@ t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max void widget_free(t_Widget *w) { int i; + if (w == NULL) return ; + free(w->nombre); switch (w->tipo) { case INPUT: @@ -237,7 +274,8 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w) } wrefresh(win); - while ((c=getch()) != 13) { + c = getch(); + while ((c != KEY_ENTER) && (c != 13)) { /* Verifico si se apreto basckspace */ if (c == KEY_BACKSPACE) { if (current > 0) { @@ -248,15 +286,20 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w) /* Este va para dejar el cursor bien, ya que addch mueve el cursor*/ wmove(win, y, x+current); wrefresh(win); + c = getch(); continue; } /* Si no entra mas, ignoro toda entrada */ - if (current >= w->max) continue; - + if (current >= w->max) { + c = getch(); + continue; + } + wmove(win, y, x+current); waddch(win, c); w->valor[current++] = c; wrefresh(win); + c = getch(); } /* Cierro el string con el \0 */ w->valor[current+1] = '\0'; diff --git a/emufs_gui/form.h b/emufs_gui/form.h index 4905196..8316e85 100644 --- a/emufs_gui/form.h +++ b/emufs_gui/form.h @@ -39,6 +39,8 @@ typedef struct _elem_ { * RADIO : Cantidad de Opciones */ unsigned int max; + /** Formato del campo de entrada */ + char *format; /** Siguiente elemento */ struct _elem_ *sig; @@ -91,7 +93,7 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i */ void form_ejecutar(t_Form *f, int x, int y); -/** Obtiene el valor asociado a un campo +/** Obtiene el valor asociado a un campo como char * * * \param f Formulario. * \param widget Nombre del campo. @@ -99,8 +101,12 @@ void form_ejecutar(t_Form *f, int x, int y); */ char *form_obtener_valor_char(t_Form *f, const char *widget); +/** Obtiene el valor asociado a un campo como int + */ int form_obtener_valor_int(t_Form *f, const char *widget); +/** Obtiene el valor asociado a un campo como float + */ float form_obtener_valor_float(t_Form *f, const char *widget); #endif diff --git a/emufs_gui/gui.c b/emufs_gui/gui.c index 95c55bf..19daa73 100644 --- a/emufs_gui/gui.c +++ b/emufs_gui/gui.c @@ -25,22 +25,12 @@ int main(int argc, char *argv[]) } /* Inicio Curses */ - signal(SIGINT, finish); /* arrange interrupts to terminate */ - initscr(); /* initialize the curses library */ - keypad(stdscr, TRUE); /* enable keyboard mapping */ - nonl(); /* tell curses not to do NL->CR/NL on output */ - cbreak(); /* take input chars one at a time, no wait for \n */ - noecho(); /* don't echo input */ - - /* Verifico un tamaño minimo de consola */ - if ((LINES < 25) || (COLS < 80)) { - endwin(); - printf("El tamaño de la consola debe ser de por lo menos 80x25!\n"); - return 1; - } - - art_cargar(argv[1]); - + signal(SIGINT, finish); + initscr(); + keypad(stdscr, TRUE); + nonl(); + cbreak(); + noecho(); /* Si se soporta color, los inicializo */ if (has_colors()) { start_color(); @@ -55,6 +45,15 @@ int main(int argc, char *argv[]) init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); } + /* Verifico un tamaño minimo de consola */ + if ((LINES < 25) || (COLS < 80)) { + endwin(); + printf("El tamaño de la consola debe ser de por lo menos 80x25!\n"); + return 1; + } + + art_cargar(argv[1]); + /* Ventana, caracter para linea vertical, caracter para linea horizontal*/ box(stdscr, ACS_VLINE, ACS_HLINE); /* Ventana, Y, X, Texto */ @@ -64,6 +63,7 @@ int main(int argc, char *argv[]) attroff(COLOR_PAIR(2)); wrefresh(stdscr); + /* CICLO PRINCIPAL DE LA APLICACION */ while ((c = main_menu()) != -1) { switch (c) { case 0: @@ -217,7 +217,7 @@ int main_menu() curs_set(0); opcion = -1; salir = 0; - while((!salir) && (c = getch()) != KEY_F(1)) { + while((!salir) && (c = getch())) { switch(c) { case KEY_DOWN: menu_driver(menu, REQ_DOWN_ITEM); @@ -226,7 +226,8 @@ int main_menu() menu_driver(menu, REQ_UP_ITEM); break; case 13: - case 10: { + case 10: + { ITEM *cur; int i;