From 4c6d9fa59f147b866ca1caee571c646d78286b10 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Sun, 18 Apr 2004 20:32:59 +0000 Subject: [PATCH 1/1] * Implemento tipo2_leer_raw ... Ojo que todavia no hice el parser que lo muestra en pantalla y creo que va a tratar de usar el tipo1 !!! asi que puede palmar! en un ratito subo todo actualizado!! --- emufs/tipo2.c | 44 ++++++++++++++++++++++++++++++++++++++------ emufs_gui/viewer.c | 8 +++++++- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/emufs/tipo2.c b/emufs/tipo2.c index 2e70d12..e0c3aba 100644 --- a/emufs/tipo2.c +++ b/emufs/tipo2.c @@ -86,7 +86,7 @@ void *emufs_tipo2_leer_registro(EMUFS* efs, EMUFS_REG_ID id_reg, EMUFS_REG_SIZE* *err = EMUFS_ERROR_CANT_OPEN_FILE; return NULL; } - fseek(f_data,reg_offset+sizeof(EMUFS_REG_ID),0); + fseek(f_data,reg_offset+sizeof(EMUFS_REG_ID),SEEK_SET); fread(reg_size,sizeof(EMUFS_REG_SIZE),1,f_data); registro = (char*)malloc(*reg_size); fread(registro,*reg_size,1,f_data); @@ -453,10 +453,42 @@ int emufs_tipo2_updateidx(EMUFS *efs) return 0; } -void* emufs_tipo2_leer_registro_raw(EMUFS *emu, EMUFS_REG_ID id, EMUFS_REG_SIZE *size, int *pos) +void* emufs_tipo2_leer_registro_raw(EMUFS *efs, EMUFS_REG_ID id, EMUFS_REG_SIZE *size, int *pos) { - (*size) = 0; - (*pos) = 0; - PERR("IMPLEMENTAME CABRON"); - return NULL; + FILE* f_data; + char *registro; /* registro a leer */ + char name_f[255]; + EMUFS_OFFSET reg_offset; /* offset donde se encuentra el registro */ + + strcpy(name_f,efs->nombre); + strcat(name_f,".dat"); + + /* Obtenemos la posicion del registro en el .dat */ + reg_offset = emufs_idx_buscar_registro(efs, id); + if (reg_offset == EMUFS_NOT_FOUND) { + PERR("Registro no encontrado"); + return NULL; + } + + /* Levantamos el registro */ + if ((f_data = fopen(name_f, "rb")) == NULL) { + PERR("No se puede abrir archivo"); + return NULL; + } + fseek(f_data,reg_offset+sizeof(EMUFS_REG_ID), SEEK_SET); + fread(size,sizeof(EMUFS_REG_SIZE),1,f_data); + registro = (char*)malloc(*size+sizeof(EMUFS_REG_ID)+sizeof(EMUFS_REG_SIZE)+100); + if (reg_offset > 50) { + fseek(f_data, reg_offset - 50, SEEK_SET); + (*pos) = 50; + } else { + /* Si no hay 50 antes mio, estoy cerca del 0! */ + (*pos) = 50 - reg_offset; + fseek(f_data, 0, SEEK_SET); + } + (*size) += sizeof(EMUFS_REG_ID)+sizeof(EMUFS_REG_SIZE)+100; + fread(registro,*size, 1,f_data); + fclose(f_data); + + return registro; } diff --git a/emufs_gui/viewer.c b/emufs_gui/viewer.c index 8905fa3..48f4d08 100644 --- a/emufs_gui/viewer.c +++ b/emufs_gui/viewer.c @@ -285,13 +285,19 @@ void ver_registros(WINDOW *padre, int w, int h, int cual) wattroff(padre, COLOR_PAIR(COLOR_BLUE)); switch (fp->tipo) { case T1: - case T2: waddstr(padre, "Registro variable con bloque parametrizado."); if (cual == 0) procesar = procesar_registro_articulo_tipo1; else procesar = procesar_registro_factura_tipo1; break; + case T2: + waddstr(padre, "Registro variable con sin bloques."); + if (cual == 0) + procesar = procesar_registro_articulo_tipo1; + else + procesar = procesar_registro_factura_tipo1; + break; case T3: if (cual == 0) procesar = procesar_registro_articulo_tipo3; -- 2.43.0