Gracias al amplio set de funciones en lo referente a datos tipo STRING que trae el lenguaje he podido crear este API que consta de todo lo necesario para crear bases de datos para las aplicaciones/juegos.
No desvelaré el secreto XD.. pero si os da por mirar el source de la librería creo que vais a flipar.. no digo mas
DOCUMENTACION:
[Codebox=text file=Untitled.txt]TSR DATABASE 2.0 DOC.
INT dbNew();
- Retorna el stream que apunta a la base de datos.
INT dbClose( INT DB_ID );
- Descarga la base de datos indicada como parámetro.
INT dbOpen( STRING filename );
- Carga desde disco el archivo de base de datos pasado como parámetro.
INT dbSave( INT DB_ID, STRING filename );
- Guarda/actualiza en disco la base de datos indicada como parámetro.
INT dbClone( INT DB_ID );
- Crea un clon de la base de datos indicada como parámetro.
- Retorna el ID de la nueva base de datos.
INT dbNameSet( INT DB_ID, STRING name );
- Retorna 0 si se pudo establecer un nombre para la base de datos.
INT dbDescSet( INT DB_ID, STRING description );
- Retorna 0 si se pudo establecer una descripción para la base de datos.
STRING dbNameGet( INT DB_ID );
- Retorna el nombre de la base de datos.
STRING dbDescGet( INT DB_ID );
- Retorna la descripción de la base de datos.
INT dbRegAdd( INT DB_ID );
INT dbRegAdd( INT DB_ID, STRING ID_REG );
- Retorna 0 si se pudo crear un nuevo registro, con el overload 1 se puede especificar un ID para el registro.
INT dbRegDelete( INT DB_ID, INT reg );
- Elimina un registro de la base de datos.
- Si el registro no existe retorna -1.
INT dbFindId( INT DB_ID, STRING Reg_ID );
INT dbFindId( INT DB_ID, STRING Reg_ID, INT Start_Reg_Number_ );
- Permite obtener el número de registro identificado como 'Reg_ID', con el overload 1
se puede especificar la posición a partir de la cual se desea comenzar la busqueda dentro de
la base de datos, esto es así para permitir buscar multiples coincidencias.
INT dbFindToken( INT DB_ID, STRING Token_To_Find );
INT dbFindToken( INT DB_ID, STRING Token_To_Find, INT Start_Reg_Number_ );
- Permite obtener el número de registro que contiene un token igual a "Token_To_Find", mediante
el overload 1 se puede especificar a partir de que registro comenzar a buscar, por el mismo motivo
que la función anterior.
INT dbRegCopy( INT DB_ID, INT src_reg, INT dst_reg );
- Copia el contenido del registro source en el registro destino.
Se copia tanto el ID como los tokens que contenga.
INT dbRegIdCopy( INT DB_ID, INT src_reg, INT dst_reg );
- Copia el ID del registro source en el registro destino.
No se copia ningún token, solo el ID.
INT dbRegContentCopy( INT DB_ID, INT src_reg, INT dst_reg );
- Copia el contenido del registro source en el registro destino.
Solo se realizará la copia de los tokens..
STRING dbRegGetId( INT DB_ID, INT reg );
- Retorna El ID del registro solicitado.
STRING dbRegGetContent( .. )
- Función de uso interno de la libreria.
- Devuelve la lista de tokens separados por el caracter especial ASCII 'ETX CODE'.
INT dbRegClear( INT DB_ID, INT reg );
- Limpia el contenido de un registro pero no elimina el registro.
INT dbRegIdClear( INT DB_ID, INT reg );
- Limpia el ID de un registro.
INT dbRegContentClear( INT DB_ID, INT reg );
- Limpia todos los tokens de un registro pero no elimina el registro.
INT dbRegGetNumTokens( INT DB_ID, INT reg );
- Retorna el número de tokens que contiene un registro.
STRING dbRegGetToken( INT DB_ID, INT reg, INT tokenNumber );
- Retorna el numToken del registro solicitado.
INT dbRegAddToken( INT DB_ID, INT reg, STRING new_token );
- Añade al registro un nuevo token.
INT dbRegModToken( INT DB_ID, INT reg, INT tokenNumber, STRING new_token_str );
- Modifica el contenido de un token de un registro con el nuevo contenido.
- Retorna -1 si el tokenNumber no existe.
INT dbRegClearToken( INT DB_ID, INT reg, INT tokenNumber );
- Setea un token a " " si existe.
- Si el token no existe en el registro inidcado retorna -1.
[/Codebox]
EJEMPLO DE CODIGO USANDO ESTO:
[Codebox=gemix file=Untitled.gemix]program DB_API;
include "TSRDB/TSRDB.prg";
Global
int my_db;
string str_;
int numTokens;
begin
mode_set( 640, 480, 32);
set_fps( 60, 0 );
my_db = dbNew(); // creo una base de datos..
// Crear un registro en la base de datos..
x = dbRegAdd( my_db, "MSG1" );
// añadir tokens al registro creado..
dbRegAddToken( my_db, x, "Dato 1" );
dbRegAddToken( my_db, x, "Dato 2" );
dbRegAddToken( my_db, x, "Dato 3" );
dbRegAddToken( my_db, x, "Dato 4" );
// modificar un token ya existente en un registro..
dbRegModToken( my_db, x, 2, "Dato 2 modificado!" );
// crear otro registro en la base de datos..
y = dbRegAdd( my_db, "" );
// copiar el registro X en el registro Y recién creado..
dbRegCopy( my_db, x, y );
// añadir un token al registro Y..
dbRegAddToken( my_db, y, "erkosone" );
// guardar el archivo de la base de datos en disco..
dbSave( my_db, "database.db" );
// Obtener el token nº 4 del registro Y..
str_ = dbRegGetToken( my_db, y, 4 );
write( 0,10,10,3, "Token 4 del registro Y contiene: " + str_ );
// OBtener el número de tokens que contiene el registro Y..
numTokens = dbRegGetNumTokens( my_db, y );
write( 0,10,20,3, "El registro Y contiene " + itoa(numTokens) + " tokens." );
// buscar un token llamado "erkosone" en los registros de la base de datos..
z = dbFindToken( my_db, "erkosone" );
write( 0,10,40,3, "El token [erkosone] ha sido encontrado en el registro: " + itoa(z) );
loop
frame;
end
end[/Codebox]