1 /* archivo con bloques parametrizados y registro constante */
9 /** Leo un registro del archivo, devuelve cero si no lo encuentra.**/
10 int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg)
12 char* bloque = (char*)malloc(emu->tam_bloque);
13 char name_f_block_reg[255];
14 int block, ID_aux, a, b, c, d;
16 strcpy(name_f_block_reg,emu->nombre);
17 strcat(name_f_block_reg,"bloc_reg.tipo3");
19 /* tengo que crear los archivos de indice antes de usarlos!!!!!!!!!*/
20 if ( (f_block_reg = fopen(name_f_block_reg,"a+")) == NULL ){
26 /* si el registro no existe, retorno*/
27 if ( existe_registro(emu,ID) == -1 ){
31 /*si existe, lo busco en el archivo de bloques*/
33 block = buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/
34 if (leer_bloque(emu, block, bloque)==-1){
36 return -1; /*No se pudo leer el bloque*/
39 while ( iterador != emu->tam_bloque ){
40 a = bloque[0+iterador];
41 b = bloque[1+iterador];
42 c = bloque[2+iterador];
43 d = bloque[3+iterador];
45 ID_aux = (d << 0 ) | (c << 8) | ( b << 16) | (a << 24);
47 memcpy(ptr,bloque[iterador],tam_reg);
59 /*busco el registro ID en el archivo reg_exist.dat, para ver si existe.*/
60 int existe_registro(EMUFS *emu, int ID)
63 char name_f_reg_exist[255];
64 strcpy(name_f_reg_exist,emu->nombre);
65 strcat(name_f_reg_exist,"_exist_reg.tipo3");
66 if ( (f_reg_exist = fopen(name_f_reg_exist,"r")) == NULL) return -1; /*ERROR*/
67 while ( !feof(f_reg_exist) ){
68 fread(®,sizeof(reg),1,f_reg_exist);
69 if ( reg.id_reg == ID && reg.existe == 'S' ){
80 /*busca el registro ID en el archivo "block_reg.dat" y devuelve el nro de bloque en el que se encuentra*/
81 int buscar_registro(EMUFS *emu, int ID)
84 char name_f_block_reg[255];
85 strcpy(name_f_block_reg,emu->nombre);
86 strcat(name_f_block_reg,"_block_reg.tipo3");
88 if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/
89 while ( !feof(f_block_reg) ){
90 fread(®,sizeof(reg),1,f_block_reg);
91 if ( reg.id_reg == ID ){
101 int leer_bloque(EMUFS *emu, int ID, void* ptr)
106 strcpy(name_f,emu->nombre);
107 strcat(name_f,".tipo3");
109 if ( (file = fopen(name_f,"r"))==NULL ) return -1; /*ERROR*/
110 fseek(file,ID*emu->tam_bloque,SEEK_SET);
111 fread(ptr,emu->tam_bloque,1,file);