/// Offset of the identifier in the file.
unsigned int nameOffset;
/// Type ID of referenced object.
- unsigned int typeId;
+ int typeId;
/// File-offset of the object's actual data.
unsigned int dataOffset;
};
unsigned int nameOffset;
/// Target position for linking/inlining.
unsigned int referenceOffset;
- /// Nonzero if the object should be copied rather that
+ /// Target type.
+ int typeId;
+ /// True if the object should be copied rather that
/// just writing a reference.
- unsigned int inlined;
+ bool inlined;
+};
+
+struct Image {
+ /// File-relative offset to the image's path string.
+ unsigned int pathOffset;
+ /// File-relative offset of the target position of the
+ /// image's reference.
+ unsigned int destOffset;
};
struct Object {
- unsigned int typeId;
+ int typeId;
unsigned int size;
+
char *RawObject();
Object *Next();
};
struct Array {
+ int typeId;
unsigned int size;
bool ref;
+
char *Data();
Array *Next();
};
+struct Script {
+ unsigned int size;
+
+ char *Text();
+ Script *Next();
+};
+
struct ObjectFileHeader {
/// Has to be "L2E\n"
char ident[4];
unsigned int externalsBegin;
unsigned int externalsEnd;
+ /// File-relative offsets of the image section's begin and
+ /// end respectively.
+ /// Denotes an array of Image structs.
+ unsigned int imagesBegin;
+ unsigned int imagesEnd;
+
/// File-relative offsets of the objet section's begin
/// and end respectively.
/// Each object begins with its type ID followed by its
unsigned int arraysBegin;
unsigned int arraysEnd;
+ /// File-relative offsets of the script section's begin
+ /// and end respectively.
+ /// Each script is an unsigned int with the length in
+ /// bytes followed by the script text.
+ unsigned int scriptsBegin;
+ unsigned int scriptsEnd;
+
ObjectFileHeader();
/// Check if there are any problems with the file header.
Export *ExportsEnd();
External *ExternalsBegin();
External *ExternalsEnd();
+ Image *ImagesBegin();
+ Image *ImagesEnd();
Object *ObjectsBegin();
Object *ObjectsEnd();
Array *ArraysBegin();
Array *ArraysEnd();
+ Script *ScriptsBegin();
+ Script *ScriptsEnd();
+
+private:
+ bool CheckSection(
+ unsigned int begin,
+ unsigned int end,
+ unsigned int fsize) const;
};
struct LoadedExport {