+void* emufs_tipo3_leer_registro_raw(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE *size, int *pos)
+{
+ char* bloque, *tmp, *cur;
+ EMUFS_BLOCK_ID block;
+ EMUFS_REG_ID ID_aux;
+ EMUFS_BLOCK_SIZE iterador = 0;
+ int err, cant_bloques, i;
+
+ bloque = NULL;
+ if (emu->tam_reg < emu->tam_bloque) {
+ /* Aca estoy en el caso de que 1 registro entra en 1 solo bloque */
+ block = emufs_idx_buscar_registro(emu,ID);
+ if ( block == EMUFS_NOT_FOUND ) {
+ return NULL;
+ }
+ if ((bloque = emufs_tipo3_leer_bloque(emu, block, &err)) == NULL) {
+ return NULL;
+ }
+
+ ID_aux = -1;
+ iterador = 0;
+
+ /* Busco el offset desde el comienzo desde donde arranca el registro
+ * buscado, para luego resaltarlo en al GUI
+ */
+ while ( iterador < emu->tam_bloque ) {
+ memcpy(&ID_aux, bloque+iterador, sizeof(EMUFS_REG_ID));
+ if ( ID_aux == ID ){
+ *pos = iterador;
+ *size = emu->tam_bloque;
+ break;
+ }
+ iterador += sizeof(EMUFS_REG_ID);
+ iterador += emu->tam_reg;
+ }
+ } else {
+ /* Junto todos los bloques que ocupa el registro y agrego un separador de bloques */
+
+ /* Busco el primer bloque */
+ block = emufs_idx_buscar_registro(emu,ID);
+ if ( block == EMUFS_NOT_FOUND ){
+ return NULL;
+ }
+ cant_bloques = emu->tam_reg / (emu->tam_bloque - sizeof(EMUFS_REG_ID))+1;
+ *size = emu->tam_bloque*cant_bloques + cant_bloques*2 - sizeof(EMUFS_REG_ID)*(cant_bloques-1);
+ bloque = (char *)malloc(*size);
+ cur = bloque;
+ *pos = 0;
+
+ /* El bloque 0 va completo */
+ err = 0;
+ if ((tmp = emufs_tipo3_leer_bloque(emu, block, &err)) == NULL) {
+ /* Oops! ... un bloque no existe, todo mal! */
+ free(bloque);
+ return NULL;
+ }
+ memcpy(cur, tmp, emu->tam_bloque);
+ cur += emu->tam_bloque;
+ memcpy(cur, "<>", 2);
+ cur += 2;
+ free(tmp);
+
+ /* En resto de los bloques no pongo el ID porque ya esta en el primero */
+ for(i=1; i<cant_bloques; i++) {
+ err = 0;
+ if ((tmp = emufs_tipo3_leer_bloque(emu, block+i, &err)) == NULL) {
+ /* Oops! ... un bloque no existe, todo mal! */
+ free(bloque);
+ return NULL;
+ }
+ memcpy(cur, tmp+sizeof(EMUFS_REG_ID), emu->tam_bloque-sizeof(EMUFS_REG_ID));
+ cur += emu->tam_bloque - sizeof(EMUFS_REG_ID);
+ memcpy(cur, "<>", 2);
+ cur += 2;
+ free(tmp);
+ }
+ (*cur) = '\0';
+ }
+ return bloque;
+}