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) {
+ 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;
+ (*pos) = reg_offset;
fseek(f_data, 0, SEEK_SET);
}
(*size) += sizeof(EMUFS_REG_ID)+sizeof(EMUFS_REG_SIZE)+100;
/* Se encarga de reemplazar los \0 un caracter visual, y segurar un \0 al final */
static char *procesar_registro_articulo_tipo3(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho);
+static char *procesar_registro_articulo_tipo2(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho);
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);
case T2:
waddstr(padre, "Registro variable con sin bloques.");
if (cual == 0)
- procesar = procesar_registro_articulo_tipo1;
+ procesar = procesar_registro_articulo_tipo2;
else
procesar = procesar_registro_factura_tipo1;
break;
return salida;
}
+char *procesar_registro_articulo_tipo2(EMUFS *emu, char *ptr, EMUFS_REG_SIZE *size, int *pos_actual, int *ancho)
+{
+ char *salida, *tmp;
+ char *in;
+ int i;
+ EMUFS_REG_SIZE tam_data;
+ if (ptr == NULL) return NULL;
+
+ (*size) = *size - sizeof(EMUFS_REG_SIZE) - sizeof(EMUFS_REG_ID) + 21;
+ (*ancho) = *size-101;
+ salida = (char *)malloc(*size);
+ memset(salida, '.', *size);
+
+ PERR("Voy por el espacio antes");
+ for(i=0; i < *pos_actual; i++) {
+ /* Los datos que tengo por ahora los pongo enmascarados! */
+ salida[i] = ((*in)=='\0')?'*':(*in);
+ in++;
+ }
+ tmp = salida + *pos_actual;
+ in = ptr + *pos_actual;
+
+ PERR("Voy por el header");
+ /* ID de registro */
+ sprintf(tmp, "(%08lu)", *((EMUFS_REG_ID *)in));
+ tmp += 10;
+ in += sizeof(EMUFS_REG_ID);
+ /* TamaƱo de registro */
+ sprintf(tmp, "{%08lu}", *((EMUFS_REG_SIZE *)in));
+ tam_data = *((EMUFS_REG_SIZE *)in);
+ tmp += 10;
+ in += sizeof(EMUFS_REG_SIZE);
+ PERR("Voy por la data");
+ i = 0;
+ while (i < tam_data) {
+ (*tmp) = ((*in)=='\0')?'*':(*in);
+ tmp++;
+ in++;
+ i++;
+ }
+ PERR("Voy por el espacio despues");
+ for(i=0; i < 100-*pos_actual; i++) {
+ (*tmp) = ((*in)=='\0')?'*':(*in);
+ tmp++;
+ in++;
+ }
+
+ free(ptr);
+ PERR("LISTO");
+ salida[*size-1] = '\0';
+ return salida;
+}
+