/**************************************************************************\ | | | Clase para el tratamiento de Bases de Datos | | | | Jos‚ David Guill‚n 1996 (c) | | | | | \**************************************************************************/ #if !defined(__BDatos_HH) #define __BDatos_HH #include #define OK 0 #define ERROR 1 #define NO_ENC -1 #define ARRIBA 1 #define ABAJO 0 #if !defined(__BDatos_CPP) #ifdef __cplusplus extern "C" { #endif #endif typedef struct { char ProgName[15]; // Estos datos se comprueban al abrir la base char VerHi, VerLow; // para saber si es la adecuada para su progr. char Other[200]; } YourHeader; typedef struct { char NBD[13]; char Eof_Code; char VerHi, VerLow; YourHeader MyHeader; long NRegistros; long NRegTotal; long SizeReg; } Header; class BDatos { public: char lError; char cError[80]; YourHeader MyHeader; void ObtenError(int code); // Obtiene el error "code" long Registros(void); // N§ de registros long NRegTotal(void); // N§ de registros long RegActual(void); // Reg. Actual BDatos(); // Constructor de Clase ~BDatos(); // Destructor de Clase int AbrirReg( char *file, long sizereg ); // Abre el Fichero void SalvaDatosUsuario( void * Datos ); // Salva los 256 bytes de usuario // Carga los datos de usuario void CargaDatosUsuario( void * Datos, unsigned char size ); void CerrarReg( void ); // Cierra el Fich. int EscribeReg( void *dato, long pos ); // Escribe un Dato int LeeReg( void *dato, long pos ); // Lee un Dato int InsReg( void *dato, long pos, char ab ); // Inserta un Reg en pos. int DelReg( long pos ); // Borra un Reg de pos. int ShortReg(void); // Corta el fich. y lo hace mas peque¤o // Ordena la Base int SortReg( int (*fcmp)(const void *, const void *) ); // Busca un registro en una base ordenada int BuscReg( long PosIni, int (*fcmp)(const void *, const void *) ); private: // Funcion auxiliar de ordenaci¢n int SortRegi( int (*fcmp)(const void *, const void *), long izquierda, long derecha ); FILE *handle_BDatos; // Handle a la Base Header BDatosHeader; long NRegActual; char filename[80]; char rError; void *A, *B; }; #if !defined(__BDatos_CPP) #ifdef __cplusplus } #endif #endif #endif /* 1 2 3 4 5 6 7 8 9 0 ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ INS (2_3) (si existen archivos borrados: " (TotalRecords+1) mark * " coge su posicion ) 1 2 3 4 5 6 7 8 9 0 ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³*X1³*X2³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³ X2³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³*X2³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ (si no existen archivos borrados: coge la posicion de Records + 1 ) 1 2 3 4 5 6 7 8 9 0 ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³ 6 ³ 7 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ ÀÄrecords = 7ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÄÂÄ ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³7+1³ 6 ³ 7 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ ÄÁÄ DEL (3) 1 2 3 4 5 6 7 8 9 0 ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³ X ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ ³^ÄÄÙ^ÄÄÙ^ÄÄÙ^ÄÄÙ /.\ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 2 ³ 3 ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³*X ³ ³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ Á Reg Mark * */