1 |
UNIT Unit9_data_structures; |
2 |
INTERFACE |
3 |
USES SysUtils; |
4 |
|
5 |
TYPE |
6 |
Tstructure_entry=RECORD |
7 |
name:String; |
8 |
offset:LongWord; |
9 |
datatype:Byte; // 1..4: Integer[1..4] dec; 5..8: Integer[1..4] hex; 9: float; 10: bitset; 11+: string[1+] |
10 |
description:String; |
11 |
END; |
12 |
Tstructure_info=RECORD |
13 |
extension:String; |
14 |
typedesc:String; |
15 |
entries:Array OF Tstructure_entry; |
16 |
END; |
17 |
Tstructures=Array OF Tstructure_info; |
18 |
|
19 |
VAR |
20 |
structure_infos:Tstructures; |
21 |
|
22 |
|
23 |
FUNCTION GetDataType(typeid:Byte):String; |
24 |
FUNCTION GetStructureInfoId(ext:String):Integer; |
25 |
FUNCTION GetTypeDataLength(datatype:Byte):Byte; |
26 |
|
27 |
|
28 |
|
29 |
IMPLEMENTATION |
30 |
|
31 |
FUNCTION GetTypeDataLength(datatype:Byte):Byte; |
32 |
BEGIN |
33 |
CASE datatype OF |
34 |
1..4: Result:=datatype; |
35 |
5..8: Result:=datatype-4; |
36 |
9: Result:=4; |
37 |
10: Result:=1; |
38 |
11..255: Result:=datatype-10; |
39 |
END; |
40 |
END; |
41 |
|
42 |
|
43 |
FUNCTION GetStructureInfoId(ext:String):Integer; |
44 |
VAR |
45 |
i:Integer; |
46 |
BEGIN |
47 |
FOR i:=0 TO High(structure_infos) DO BEGIN |
48 |
IF structure_infos[i].extension=ext THEN BEGIN |
49 |
Result:=i; |
50 |
Exit; |
51 |
END; |
52 |
END; |
53 |
Result:=-1; |
54 |
END; |
55 |
|
56 |
|
57 |
FUNCTION GetDataType(typeid:Byte):String; |
58 |
BEGIN |
59 |
CASE typeid OF |
60 |
1..4: Result:='Int'+IntToStr(typeid*8); |
61 |
5..8: Result:='Int'+IntToStr((typeid-4)*8); |
62 |
9: Result:='Float'; |
63 |
10: Result:='BitSet'; |
64 |
11..255: Result:='String('+IntToStr(typeid-10)+')'; |
65 |
END; |
66 |
END; |
67 |
|
68 |
|
69 |
PROCEDURE AddEntry(_ext:String; _name:String; _offset:LongWord; _datatype:Byte; _description:String); |
70 |
VAR |
71 |
sid:Integer; |
72 |
BEGIN |
73 |
sid:=GetStructureInfoId(_ext); |
74 |
IF sid>=0 THEN BEGIN |
75 |
WITH structure_infos[sid] DO BEGIN |
76 |
SetLength(entries,Length(entries)+1); |
77 |
WITH entries[High(entries)] DO BEGIN |
78 |
name:=_name; |
79 |
offset:=_offset; |
80 |
datatype:=_datatype; |
81 |
description:=_description; |
82 |
END; |
83 |
END; |
84 |
END; |
85 |
END; |
86 |
|
87 |
|
88 |
PROCEDURE AddExtension(_ext:String; _typedesc:String); |
89 |
BEGIN |
90 |
IF GetStructureInfoId(_ext)<0 THEN BEGIN |
91 |
SetLength(structure_infos,Length(structure_infos)+1); |
92 |
WITH structure_infos[High(structure_infos)] DO BEGIN |
93 |
extension:='TXMP'; |
94 |
typedesc:='Texture'; |
95 |
END; |
96 |
END; |
97 |
END; |
98 |
|
99 |
|
100 |
BEGIN |
101 |
AddExtension('TXMP','Texture'); |
102 |
AddEntry('TXMP','ID',$00,4,'ID of this file'); |
103 |
AddEntry('TXMP','LevelID',$04,8,'ID of the level this file is in'); |
104 |
AddEntry('TXMP','FileName',$08,138,''); |
105 |
AddEntry('TXMP','Fading',$88,10,'Fading-Bitset'); |
106 |
AddEntry('TXMP','Depth',$89,10,'Depth-Bitset'); |
107 |
AddEntry('TXMP','Width',$8C,2,'x-resolution of image'); |
108 |
AddEntry('TXMP','Height',$8E,2,'y-resolution of image'); |
109 |
AddEntry('TXMP','Storetype',$90,10,'Storetype-Bitset'); |
110 |
AddEntry('TXMP','TXAN-Link',$94,8,'Link to the TXAN-file (if this TXMP is the first image of an animation)'); |
111 |
AddEntry('TXMP','TXMP-Link',$98,8,'Link to another TXMP-file'); |
112 |
AddEntry('TXMP','Raw-Link',$9C,8,'Address of the image data in the .raw-file'); |
113 |
END. |