+ free(reg);
+ }
+ /*trunco el archivo sacando los bloques vacios*/
+ block_id = emufs_fsc_buscar_lugar(emu, emu->tam_bloque, &fs);
+ size = sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE)+block_id*emu->tam_bloque;
+ if (truncate(name, size)!=0)
+ PERR("NO TRUNQUE NADA");
+ /*hay que truncar el fsc!!!*/
+ if(emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg) block_id = block_id/2;
+ if (emufs_fsc_truncate(emu, block_id)!= 0)
+ PERR("NO TURNQUE EL FSC");
+#endif
+}
+
+void emufs_tipo3_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, char **anterior, char **siguiente,
+ EMUFS_BLOCK_SIZE *size1, EMUFS_BLOCK_SIZE *size2, EMUFS_BLOCK_SIZE *size3)
+{
+ int err;
+ (*actual) = emufs_tipo3_leer_bloque(efs, id, &err);
+ (*anterior) = emufs_tipo3_leer_bloque(efs, id-1, &err);
+ (*siguiente) = emufs_tipo3_leer_bloque(efs, id+1, &err);
+ if (!(*anterior)) {
+ (*anterior) = (char *)malloc(efs->tam_bloque);
+ memset(*anterior, 0, efs->tam_bloque);
+ }
+ if (!(*siguiente)) {
+ (*siguiente) = (char *)malloc(efs->tam_bloque);
+ memset(*siguiente, 0, efs->tam_bloque);
+ }
+ (*size1) = (*size2) = (*size3) = efs->tam_bloque;
+}
+
+CLAVE obtener_clave(void *ptr, INDICE indice)
+{
+ CLAVE clave;
+
+ switch ( indice->tipo_dato ){
+ case IDX_FLOAT:
+ memcpy(&clave, ptr+indice->offset, sizeof(float));
+ break;
+ case IDX_INT:
+ memcpy(&clave, ptr+indice->offset, sizeof(int));
+ }
+ return clave;
+}
+
+int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int offset, EMUFS_BLOCK_ID num_bloque, int *err)
+{
+ /*FILE *f;
+ char f_name[255];*/
+ char *bloque;
+ CLAVE clave_ant;
+
+
+ bloque = emufs_tipo3_leer_bloque(emu, num_bloque, err);
+ if (err){
+ PERR("NO SE PUDO LEER EL BLQUE");
+ return -1;