1 /*         ______   ___    ___
2  *        /\  _  \ /\_ \  /\_ \
3  *        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
4  *         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
5  *          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
6  *           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
7  *            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
8  *                                           /\____/
9  *                                           \_/__/
10  *
11  *      Datafile access routines.
12  *
13  *      By Shawn Hargreaves.
14  *
15  *      See readme.txt for copyright information.
16  */
17 
18 
19 #ifndef ALLEGRO_DATAFILE_H
20 #define ALLEGRO_DATAFILE_H
21 
22 #include "base.h"
23 
24 #ifdef __cplusplus
25    extern "C" {
26 #endif
27 
28 struct BITMAP;
29 struct PACKFILE;
30 struct RGB;
31 
32 #define DAT_ID(a,b,c,d)    AL_ID(a,b,c,d)
33 
34 #define DAT_MAGIC          DAT_ID('A','L','L','.')
35 #define DAT_FILE           DAT_ID('F','I','L','E')
36 #define DAT_DATA           DAT_ID('D','A','T','A')
37 #define DAT_FONT           DAT_ID('F','O','N','T')
38 #define DAT_SAMPLE         DAT_ID('S','A','M','P')
39 #define DAT_MIDI           DAT_ID('M','I','D','I')
40 #define DAT_PATCH          DAT_ID('P','A','T',' ')
41 #define DAT_FLI            DAT_ID('F','L','I','C')
42 #define DAT_BITMAP         DAT_ID('B','M','P',' ')
43 #define DAT_RLE_SPRITE     DAT_ID('R','L','E',' ')
44 #define DAT_C_SPRITE       DAT_ID('C','M','P',' ')
45 #define DAT_XC_SPRITE      DAT_ID('X','C','M','P')
46 #define DAT_PALETTE        DAT_ID('P','A','L',' ')
47 #define DAT_PROPERTY       DAT_ID('p','r','o','p')
48 #define DAT_NAME           DAT_ID('N','A','M','E')
49 #define DAT_END            -1
50 
51 
52 typedef struct DATAFILE_PROPERTY
53 {
54    char *dat;                          /* pointer to the data */
55    int type;                           /* property type */
56 } DATAFILE_PROPERTY;
57 
58 
59 typedef struct DATAFILE
60 {
61    void *dat;                          /* pointer to the data */
62    int type;                           /* object type */
63    long size;                          /* size of the object */
64    DATAFILE_PROPERTY *prop;            /* object properties */
65 } DATAFILE;
66 
67 
68 typedef struct DATAFILE_INDEX
69 {
70    char *filename;                     /* datafile name (path) */
71    long *offset;                       /* list of offsets */
72 } DATAFILE_INDEX;
73 
74 
75 AL_FUNC(DATAFILE *, load_datafile, (AL_CONST char *filename));
76 AL_FUNC(DATAFILE *, load_datafile_callback, (AL_CONST char *filename, AL_METHOD(void, callback, (DATAFILE *))));
77 AL_FUNC(DATAFILE_INDEX *, create_datafile_index, (AL_CONST char *filename));
78 AL_FUNC(void, unload_datafile, (DATAFILE *dat));
79 AL_FUNC(void, destroy_datafile_index, (DATAFILE_INDEX *index));
80 
81 AL_FUNC(DATAFILE *, load_datafile_object, (AL_CONST char *filename, AL_CONST char *objectname));
82 AL_FUNC(DATAFILE *, load_datafile_object_indexed, (AL_CONST DATAFILE_INDEX *index, int item));
83 AL_FUNC(void, unload_datafile_object, (DATAFILE *dat));
84 
85 AL_FUNC(DATAFILE *, find_datafile_object, (AL_CONST DATAFILE *dat, AL_CONST char *objectname));
86 AL_FUNC(AL_CONST char *, get_datafile_property, (AL_CONST DATAFILE *dat, int type));
87 AL_FUNC(void, register_datafile_object, (int id_, AL_METHOD(void *, load, (struct PACKFILE *f, long size)), AL_METHOD(void, destroy, (void *data))));
88 
89 AL_FUNC(void, fixup_datafile, (DATAFILE *data));
90 
91 AL_FUNC(struct BITMAP *, load_bitmap, (AL_CONST char *filename, struct RGB *pal));
92 AL_FUNC(struct BITMAP *, load_bmp, (AL_CONST char *filename, struct RGB *pal));
93 AL_FUNC(struct BITMAP *, load_bmp_pf, (PACKFILE *f, struct RGB *pal));
94 AL_FUNC(struct BITMAP *, load_lbm, (AL_CONST char *filename, struct RGB *pal));
95 AL_FUNC(struct BITMAP *, load_pcx, (AL_CONST char *filename, struct RGB *pal));
96 AL_FUNC(struct BITMAP *, load_pcx_pf, (PACKFILE *f, struct RGB *pal));
97 AL_FUNC(struct BITMAP *, load_tga, (AL_CONST char *filename, struct RGB *pal));
98 AL_FUNC(struct BITMAP *, load_tga_pf, (PACKFILE *f, struct RGB *pal));
99 
100 AL_FUNC(int, save_bitmap, (AL_CONST char *filename, struct BITMAP *bmp, AL_CONST struct RGB *pal));
101 AL_FUNC(int, save_bmp, (AL_CONST char *filename, struct BITMAP *bmp, AL_CONST struct RGB *pal));
102 AL_FUNC(int, save_bmp_pf, (PACKFILE *f, struct BITMAP *bmp, AL_CONST struct RGB *pal));
103 AL_FUNC(int, save_pcx, (AL_CONST char *filename, struct BITMAP *bmp, AL_CONST struct RGB *pal));
104 AL_FUNC(int, save_pcx_pf, (PACKFILE *f, struct BITMAP *bmp, AL_CONST struct RGB *pal));
105 AL_FUNC(int, save_tga, (AL_CONST char *filename, struct BITMAP *bmp, AL_CONST struct RGB *pal));
106 AL_FUNC(int, save_tga_pf, (PACKFILE *f, struct BITMAP *bmp, AL_CONST struct RGB *pal));
107 
108 AL_FUNC(void, register_bitmap_file_type, (AL_CONST char *ext, AL_METHOD(struct BITMAP *, load, (AL_CONST char *filename, struct RGB *pal)), AL_METHOD(int, save, (AL_CONST char *filename, struct BITMAP *bmp, AL_CONST struct RGB *pal))));
109 
110 #ifdef __cplusplus
111    }
112 #endif
113 
114 #endif          /* ifndef ALLEGRO_DATAFILE_H */
115