Los ficheros de datos son creados por la utilidad grabber, y tienen la extensión .dat. Pueden contener bitmaps, paletas de color, fuentes, sonidos, música MIDI, animaciones FLI/FLC y cualquier otro tipo binario de datos que importe.
Atención: cuando use imágenes truecolor, debería activar el modo gráfico antes de cargar ningún bitmap! Si no, el formato (RGB o BGR) será desconocido, y el fichero probablemente será convertido erróneamente.
Mire la documentación en pack_fopen() para obtener información sobre como leer directamente de un fichero de datos.
DATAFILE *load_datafile(const char *filename);
Carga un fichero de datos en memora, devolviendo un puntero hacia él, o
NULL si ha habido un error. Si el fichero de datos ha sido encriptado,
primero tiene que usar la función packfile_password() para introducir la
clave correcta. Mire grabber.txt para mas información. Si el fichero de
datos contiene gráficos truecolor, debe entrar en modo gráfico o llamar
set_color_conversion() antes de cargarlo.
Relacionado con: find_datafile_object, register_datafile_object, load_datafile_callback, unload_datafile, load_datafile_object, set_color_conversion, fixup_datafile, packfile_password.DATAFILE *load_datafile_callback(const char *filename, void (*callback)(DATAFILE *d));
Relacionado con: find_datafile_object, register_datafile_object, load_datafile, unload_datafile, load_datafile_object, set_color_conversion, fixup_datafile, packfile_password.void unload_datafile(DATAFILE *dat);
Relacionado con: load_datafile.DATAFILE *load_datafile_object(const char *filename, const char *objectname);
Relacionado con: register_datafile_object, unload_datafile_object, load_datafile, set_color_conversion.void unload_datafile_object(DATAFILE *dat);
Relacionado con: load_datafile_object.DATAFILE *find_datafile_object(DATAFILE *dat, const char *objectname);
Relacionado con: load_datafile, load_datafile_object.char *get_datafile_property(DATAFILE *dat, int type);
void register_datafile_object(int id, void *(*load)(PACKFILE *f, long size),
void (*destroy)(void *data));
Usado para añadir tipos de objetos propios, especificando las funciones
de carga y destrucción de este tipo. Mire grabber.txt para mas
información.
Relacionado con: load_datafile, load_datafile_object.void fixup_datafile(DATAFILE *data);
Relacionado con: set_gfx_mode, set_color_conversion.
Cuando cargue un fichero de datos, obtendrá un puntero a un array de estructuras DATAFILE:
El campo type puede tener uno de los siguientes valores:typedef struct DATAFILE { void *dat; - puntero a los datos int type; - tipo del dato long size; - tamaño de los datos en bytes void *prop; - propiedades de los objetos } DATAFILE;
El programa grabber también puede producir un fichero de cabecera que define el índice de los objetos dentro de un fichero de datos como una serie de constantes definidas, usando los nombres que les dio en el grabber. Por ejemplo, si creó un fichero de datos llamado foo.dat que contiene el bitmap llamado LA_IMAGEN, puede enseñarlo con el siguiente fragmento de código:DAT_FILE - dat apunta a un fichero de datos anidado DAT_DATA - dat apunta a un bloque ordinario de datos DAT_FONT - dat apunta a una fuente DAT_SAMPLE - dat apunta a un fichero de sonido DAT_MIDI - dat apunta a un fichero MIDI DAT_PATCH - dat apunta a un 'patch' para la GUS DAT_FLI - dat apunta a una animación FLI/FLC DAT_BITMAP - dat apunta a una estructura BITMAP DAT_RLE_SPRITE - dat apunta a una estructura RLE_SPRITE DAT_C_SPRITE - dat apunta a un sprite compilado linearmente DAT_XC_SPRITE - dat apunta a un sprite de modo-X DAT_PALETTE - dat apunta a un array de 256 estructuras RGB DAT_END - bit especial que marca el final de una lista de datos
Si está programando en C++. obtendrá un error porque el campo dat es un puntero void y draw_sprite espera un puntero BITMAP. Puede solucionarlo con una conversión de puntero. Ejemplo:#include "foo.h" DATAFILE *data = load_datafile("foo.dat"); draw_sprite(screen, data[LA_IMAGEN].dat, x, y);
Cuando carge un sólo objeto de un fichero de datos, obtendrá un puntero a una estructura DATAFILE única. Esto significa que no puede acceder a él como un array, y no contiene el objeto DAT_END. Ejemplo:draw_sprite(screen, (BITMAP *)data[LA_IMAGEN].dat, x, y);
objeto_musica = load_datafile_object("datos.dat", "MUSICA"); play_midi(objeto_musica->;dat);