+
+
+
+/* me devuelve el ID del bloque donde quepa un registro, y guarda en fs el espacio libre que queda en el bloque */
+int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs)
+{
+ BLOCK_FREE_T reg;
+ char name_f_block_reg[255];
+
+ strcpy(name_f_block_reg,emu->nombre);
+ strcat(name_f_block_reg,".fsc");
+
+ if ( (f_block_free = fopen(name_f_block_reg,"r"))==NULL ) return -1;
+
+ while( !feof(f_block_free) ){
+ fread(®,sizeof(reg),1,f_block_free);
+ if ( reg.free_space >= tam )
+ break;
+ else reg.block = -1;
+ }
+
+ fclose(f_block_free);
+ *fs = reg.free_space;
+ return reg.block;
+}
+
+/*Busco en el archivo de Id`s un Id valido para un nuevo registro*/
+int get_id(EMUFS *emu)
+{
+ BLOCK_REG_T reg;
+ int id, max = -1;
+ char name_f_reg_exist[255];
+ char name_f_block_reg[255];
+
+ strcpy(name_f_block_reg,emu->nombre);
+ strcat(name_f_block_reg,".id3");
+
+ strcpy(name_f_reg_exist,emu->nombre);
+ strcat(name_f_reg_exist,".ids");
+
+ if ( (f_reg_exist = fopen(name_f_reg_exist,"r")) == NULL) return -1; /*ERROR*/
+ if ( !feof(f_reg_exist) ){
+ /* si el archivo no esta vacio es porque hay un nro disponible*/
+ fseek(f_reg_exist,sizeof(id),SEEK_END);
+ fread(&id,sizeof(id),1,f_reg_exist);
+ /* FIXME: tengo que truncar el archivo*/
+ /* FIXME: tengo que truncar el archivo*/
+ /* FIXME: tengo que truncar el archivo*/
+ }else{
+ /*si no, hay que buscar el mayor de los numeros*/
+ if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/
+ while ( !feof(f_block_reg) ){
+ fread(®,sizeof(reg),1,f_block_reg);
+ if ( reg.id_reg >= max )
+ max = reg.id_reg;
+ }
+ id = max+1;
+ }
+
+ fclose(f_block_reg);
+ fclose(f_reg_exist);
+ return id;
+}