]> git.localhorst.tv Git - l2e.git/blob - ObjectFile.h
6a7d6773d6403016e7547e9bcf06c13ad4a15cc3
[l2e.git] / ObjectFile.h
1 /*
2  * ObjectFile.h
3  *
4  *  Created on: Sep 15, 2012
5  *      Author: holy
6  */
7
8 #ifndef LOADER_OBJECTFILE_H_
9 #define LOADER_OBJECTFILE_H_
10
11 #include <SDL.h>
12
13 namespace loader {
14
15 const int FORMAT_ID(1);
16
17 struct ObjectFileHeader {
18         char ident[4];
19
20         int versionId;
21
22         int exportsBegin;
23         int exportsEnd;
24
25         int externalsBegin;
26         int externalsEnd;
27
28         int exportStringsBegin;
29         int exportStringsEnd;
30
31         int externalStringsBegin;
32         int externalStringsEnd;
33
34         int imagesBegin;
35         int imagesEnd;
36
37         int objectsBegin;
38         int objectsEnd;
39
40         ObjectFileHeader();
41 };
42
43 struct TypeOffset {
44         int typeId;
45         int begin;
46         int end;
47 };
48
49 struct Export {
50         int nameOffset;
51         int typeId;
52         int dataOffset;
53 };
54
55 struct External {
56         int nameOffset;
57         int referenceOffset;
58         int inlined;
59 };
60
61 struct ImageProperties {
62         Uint32 flags;
63         int width;
64         int height;
65         int depth;
66         int pitch;
67         Uint32 rmask;
68         Uint32 gmask;
69         Uint32 bmask;
70         Uint32 amask;
71 };
72
73 struct LoadedObjectFile {
74         char *allocPtr;
75         ObjectFileHeader *fileHeader;
76
77         TypeOffset *typeOffsetsBegin;
78         TypeOffset *typeOffsetsEnd;
79
80         Export *exportsBegin;
81         Export *exportsEnd;
82
83         External *externalsBegin;
84         External *externalsEnd;
85
86         char *exportStringsBegin;
87         char *exportStringsEnd;
88
89         char *externalStringsBegin;
90         char *externalStringsEnd;
91
92         char *imagesBegin;
93         char *imagesEnd;
94
95         char *objectsBegin;
96         char *objectsEnd;
97
98         SDL_Surface **surfaces;
99         int surfaceCount;
100
101         LoadedObjectFile();
102
103         char *At(int offset) { return reinterpret_cast<char *>(fileHeader) + offset; }
104 };
105
106 struct LoadedExport {
107         char *location;
108         int typeId;
109 };
110
111 }
112
113 #endif /* LOADER_OBJECTFILE_H_ */