fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error);
*/
}
- lista_agregar_fila(lista,
- fact.numero,
- fact.emision,
- get_estado(fact.estado),
- get_forma_pago(fact.fp)
- );
+ if (strcmp(estado, "Todos") != 0) {
+ if (strcmp(estado, fact.estado) == 0) {
+ lista_agregar_fila_ordenada(lista,
+ fact.numero,
+ fact.emision,
+ get_estado(fact.estado),
+ get_forma_pago(fact.fp)
+ );
+ }
+ }
}
if (datos) free(datos);
k_menor = idx->obtener_sig_clave(idx, k_menor);
}
}
+void lista_agregar_fila_ordenada(t_Lista *lst, ...)
+{
+ int i, fin;
+ t_Columna *col;
+ t_Fila *nueva, *pos;
+ va_list args;
+
+ col = lst->columnas;
+ nueva = malloc(sizeof(t_Fila));
+ nueva->datos = malloc(sizeof(t_Dato)*lst->cant_columnas);
+ nueva->sig = NULL;
+ nueva->ant = NULL;
+
+ va_start(args, lst);
+ /* Para cada columna, leo el dato y lo agrego en la fila */
+ i = 0;
+ while (col) {
+ fprintf(stderr, "Dato en columnas %d\n", i);
+ switch (col->tipo) {
+ case DATO_INT:
+ nueva->datos[i].i_dato = va_arg(args, int);
+ break;
+ case DATO_STR:
+ strcpy(nueva->datos[i].s_dato, va_arg(args, char *));
+ break;
+ case DATO_FLOAT:
+ nueva->datos[i].f_dato = va_arg(args, double);
+ }
+ i++;
+ col = col->sig;
+ }
+ va_end(args);
+
+ col = lst->columnas;
+
+ /* Agrego la fila ordenada */
+ if (lst->primera == NULL) {
+ lst->primera = nueva;
+ } else {
+ pos = lst->primera;
+ fin = 0;
+ while ((pos->sig != NULL) && (!fin)) {
+ switch (col->tipo) {
+ case DATO_INT:
+ fin = (pos->datos[0].i_dato >= nueva->datos[0].i_dato);
+ break;
+ case DATO_STR:
+ fin = (strcmp(pos->datos[0].s_dato, nueva->datos[0].s_dato) >= 0);
+ break;
+ case DATO_FLOAT:
+ fin = (pos->datos[0].f_dato >= nueva->datos[0].f_dato);
+ }
+ if (!fin)
+ pos = pos->sig;
+ }
+ if (pos->ant == NULL) {
+ /* Soy el primero */
+ nueva->sig = lst->primera;
+ lst->primera = nueva;
+ pos->ant = nueva;
+ } else {
+ pos->ant->sig = nueva;
+ nueva->ant = pos->ant;
+ pos->ant = nueva;
+ nueva->sig = pos;
+ }
+ }
+}
+
void print_lista(t_Lista *lst, t_Fila *fil, int sel)
{
char texto[100];
*/
void lista_agregar_fila(t_Lista *lst, ...);
+/** Agrega una fila a la lista ordenada
+ *
+ * La fila se agrega pasando cada parametro en funcion del tipo
+ * de cada columna. Se deben pasar tantos datos como columnas
+ * existen.
+ *
+ * El orden se define por el primer parametro
+ */
+void lista_agregar_fila_ordenada(t_Lista *lst, ...);
+
/** Muestra la lista en pantalla
*
* \param lst