X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/1a91316f990d419553dcad3b40074f6484d28b28..771d5d90ad3fa04217d2f517a79bea62f2c4e9e1:/emufs_gui/registros.c?ds=inline diff --git a/emufs_gui/registros.c b/emufs_gui/registros.c index babea55..65f8070 100644 --- a/emufs_gui/registros.c +++ b/emufs_gui/registros.c @@ -9,7 +9,7 @@ static char *procesar_registro_articulo_tipo3(EMUFS *emu, char *ptr, EMUFS_REG_S static char *procesar_registro_articulo_tipo1(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho); static char *procesar_registro_factura_tipo3(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho); -/*static char *procesar_registro_factura_tipo1(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho);*/ +static char *procesar_registro_factura_tipo1(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho); static int preguntar_id(WINDOW *win, EMUFS *fp); @@ -80,7 +80,10 @@ void ver_registros(WINDOW *padre, int w, int h, int cual) switch (fp->tipo) { case T1: waddstr(padre, "Registro variable con bloque parametrizado."); - procesar = procesar_registro_articulo_tipo1; + if (cual == 0) + procesar = procesar_registro_articulo_tipo1; + else + procesar = procesar_registro_factura_tipo1; break; case T2: waddstr(padre, "Registro variable sin bloques."); @@ -510,7 +513,7 @@ char *procesar_registro_factura_tipo3(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *siz tmp1 += 10; tmp += sizeof(int); /* Pongo reg_nota */ - sprintf(tmp1, "{%08lu}", *((EMUFS_BLOCK_ID*)tmp)); + sprintf(tmp1, "(%08lu)", *((EMUFS_BLOCK_ID*)tmp)); tmp1 += 10; tmp += sizeof(EMUFS_BLOCK_ID); @@ -580,3 +583,159 @@ char *procesar_registro_factura_tipo3(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *siz return salida; } + +char *procesar_registro_factura_tipo1(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho) +{ + char *tmp, *salida, *tmp1, pos_actualizada, ant; + EMUFS_REG_SIZE offset, curr_size; + char flotante[10]; + int cant_header, i=0, j, tam_data, k; + int cant_items; + if (ptr == NULL) return NULL; + + PERR("Empieza el baile"); + cant_header = 0; + offset = 0; + do { + /* Me salto el ID, que no me interesa saber su valor */ + offset += sizeof(EMUFS_REG_ID); + /* Copio el tamaño del registro de la cabecera. */ + memcpy(&curr_size, ptr + offset, sizeof(EMUFS_REG_SIZE)); + offset += sizeof(EMUFS_REG_SIZE); + + /* Desplazo el offset */ + if (curr_size == 0) { + /* Si el tamaño de registro es 0, quiere decir que llegue a la + * parte que esta vacia */ + break; + } else { + cant_header++; + offset += curr_size; + } + } while (offset+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_REG_ID) < (*size)); + + fprintf(stderr, "Tengo %d headers\n", cant_header); + /* El tamaño del nuevo array lo calculo asi : + * + */ + tmp1 = salida = (char *)malloc(1000000); /*(*size)-(sizeof(char *)+sizeof(t_Item *)+sizeof(EMUFS_REG_ID)+sizeof(int)*3+sizeof(float)+sizeof(EMUFS_BLOCK_ID))*cant_header + 5*cant_header*10+1);*/ + if (salida == NULL) { + PERR("Error de malloc en salida"); + return NULL; + } + tmp = ptr; + pos_actualizada = 0; + (*ancho) = 0; + i = 0; + while (itam_bloque > emu->tam_reg) { + (*size) = tmp1-salida; + } else { + (*size) = tmp1-salida; + (*ancho) = tmp1-salida; + } + salida[*size-1] = '\0'; + + return salida; +} +