1 /* archivo con bloques parametrizados y registro constante */
9 /** Leo un registro del archivo, devuelve cero si no lo encuentra.**/
10 int leer_registro(int ID, void *str, unsigned long tam)
12 struct t_param_cte dato;
13 char* bloque = (char*)malloc(tam);
15 int block, i, ID_aux, a, b, c, d;
17 /* tengo que crear los archivos de indice antes de usarlos!!!!!!!!!*/
18 if ( (block_reg = fopen("block_reg.dat","a+")) == NULL )
21 if ( (block_free = fopen("block_free.dat","a+")) == NULL )
24 if ( (reg_exist = fopen("reg_exist.dat","a+")) == NULL )
26 /* si el registro no existe, retorno*/
27 if ( existe_registro(ID) == -1 ) return -1;
28 /*si existe, lo busco en el archivo de bloques*/
30 block = buscar_registro(ID); /*me devuelve el nro de bloque al que pertenece el registro*/
31 if (leer_bloque(block,bloque,tam)==-1)
32 return -1; /*No se pudo leer el bloque*/
34 while ( iterador != (tam/sizeof(dato)) ){
35 a = bloque[0+iterador];
36 b = bloque[1+iterador];
37 c = bloque[2+iterador];
38 d = bloque[3+iterador];
39 ID_aux = (d << 0 ) | (c << 8) | ( b << 16) | (a << 24);
44 iterador += sizeof(dato);
55 /*busco el registro ID en el archivo reg_exist.dat, para ver si existe.*/
56 int existe_registro(int ID)
60 if ( (reg_exist = fopen("reg_exist.dat","r")) == NULL) return 0; /*ERROR*/
61 while ( !feof(reg_exist) ){
62 fscanf(reg_exist,"%i%c",num,ex);
63 if ( num == ID && ex == 'S' ){
74 /*busca el registro ID en el archivo "block_reg.dat" y devuelve el nro de bloque en el que se encuentra*/
75 int buscar_registro(int ID)
77 int num_block, num_reg;
78 if ( (block_reg = fopen("block_reg.dat","r")) == NULL) return 0; /*ERROR*/
79 while ( !feof(block_reg) ){
80 fscanf(block_reg,"%i%i",num_block,num_reg);
91 int copiar(struct t_param_cte dato, void** str)
93 if (str == NULL) return 0;
95 strcpy(str->num_fac,dato.num_fac);
96 strcpy(str->fecha_emision,dato.fecha_emision);
97 strcpy(str->fecha_vto,dato.fecha_vto);
98 strcpy(str->num_fac,dato.num_fac);
99 strcpy(str->num_remito,dato.num_remito);
100 strcpy(str->estado,dato.estado);
101 strcpy(str->FP,dato.FP);
102 strcpy(str->Por_DoI,dato.Por_DoI);
103 strcpy(str->num_cta_cte,dato.num_cta_cte);
104 strcpy(str->num_cheque,dato.num_cheque);
105 str->texto = dato.texto;
109 int leer_bloque(int ID, void* str, unsigned long tam)