0
|
1 /*
|
|
2 * DMLib
|
|
3 * -- PACK-file routines
|
|
4 * Programmed and designed by Matti 'ccr' Hamalainen
|
|
5 * (C) Copyright 2011 Tecnic Software productions (TNSP)
|
|
6 */
|
|
7 #ifndef DMPACK_H
|
|
8 #define DMPACK_H
|
|
9 #include "dmlib.h"
|
|
10
|
|
11
|
|
12 #define DPACK_IDENT "TNSPDPCK" // Magic ident
|
|
13 #define DPACK_VERSION (0x0120) // Version
|
|
14 #define DPACK_TMPSIZE (128 * 1024)
|
|
15
|
|
16
|
|
17 typedef struct _DMPackEntry
|
|
18 {
|
|
19 char filename[DMRES_NAME_LEN];
|
|
20 Uint32 size; // Size (UNCOMPRESSED)
|
|
21 Uint32 offset; // Offset in pack file
|
|
22 Uint32 length; // (Compressed) data length
|
|
23
|
|
24 Uint32 resFlags; // Resource flags (used by resource handler)
|
|
25
|
|
26 Uint32 privFlags; // Private flags
|
|
27
|
|
28 struct _DMPackEntry *next, *prev;
|
|
29 } DMPackEntry;
|
|
30
|
|
31
|
|
32 typedef struct
|
|
33 {
|
|
34 DMPackEntry *entries;
|
|
35 char * filename; // Filename & path
|
|
36 FILE * file; // File
|
|
37 } DMPackFile;
|
|
38
|
|
39
|
|
40 typedef struct
|
|
41 {
|
|
42 char ident[8]; // Magic identifier
|
|
43 Uint16 version; // Version
|
|
44 Uint32 dirEntries; // Number of entries
|
|
45 Uint32 dirOffset; // Offset of the directory
|
|
46 } DMPackFileHeader;
|
|
47
|
|
48
|
|
49 DMPackEntry * dm_pack_entry_new();
|
|
50 void dm_pack_entry_free(DMPackEntry *);
|
|
51 void dm_pack_entry_insert(DMPackEntry **, DMPackEntry *);
|
|
52 void dm_pack_entry_delete(DMPackEntry **, DMPackEntry *);
|
|
53
|
|
54 DMPackEntry * dm_pack_find(DMPackEntry *list, const char *filename);
|
|
55
|
|
56 int dm_pack_open(const char *, DMPackFile **, BOOL);
|
|
57 int dm_pack_close(DMPackFile *);
|
|
58 int dm_pack_read(DMPackFile *, const char *, Uint8 **, size_t *);
|
|
59
|
|
60
|
|
61 #endif // DMPACK_H
|