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:
   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
   #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);