-
Notifications
You must be signed in to change notification settings - Fork 0
/
rpftypes.h
85 lines (72 loc) · 1.46 KB
/
rpftypes.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#pragma once
struct Header7
{
uint32_t magic;
uint32_t entryCount;
uint32_t nameLength;
uint32_t encryption;
};
struct DirectoryEntry
{
uint32_t nameOffset;
uint32_t entryType;
uint32_t entryIndex;
uint32_t entriesCnt;
};
struct BinaryEntry
{
uint16_t nameOffset;
uint8_t fileSize[3];
uint8_t fileOffset[3];
uint32_t realSize;
uint32_t isEncrypted;
uint32_t GetFileSize()
{
return fileSize[0] + (fileSize[1] << 8) + (fileSize[2] << 16);
}
uint32_t GetFileOffset()
{
return fileOffset[0] + (fileOffset[1] << 8) + (fileOffset[2] << 16);
}
bool IsCompressed()
{
return GetFileSize() != 0;
}
};
struct ResourceEntry
{
uint16_t nameOffset;
uint8_t fileSize[3];
uint8_t fileOffset[3];
uint32_t systemFlags;
uint32_t graphicsFlags;
uint32_t GetFileSize()
{
return fileSize[0] + (fileSize[1] << 8) + (fileSize[2] << 16);
}
uint32_t GetFileOffset()
{
return (fileOffset[0] + (fileOffset[1] << 8) + (fileOffset[2] << 16)) & 0x7FFFFF;
}
};
struct Entry
{
union
{
DirectoryEntry dir;
BinaryEntry bin;
ResourceEntry res;
};
bool IsDirectory()
{
return dir.entryType == 0x7FFFFF00;
}
bool IsBinary()
{
return !IsDirectory() && (dir.entryType & 0x80000000) == 0L;
}
bool IsResource()
{
return !IsDirectory() && !IsBinary();
}
};