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:
- 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.
EJEMPLO DE CODIGO USANDO ESTO:
- 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