LIBS/BDATOS/BDATOS.HH
2021-09-08 21:26:43 +02:00

148 lines
4.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**************************************************************************\
| |
| Clase para el tratamiento de Bases de Datos |
| |
| Jos David Guilln 1996 (c) |
| |
| |
\**************************************************************************/
#if !defined(__BDatos_HH)
#define __BDatos_HH
#include <stdio.h>
#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 *
*/