| 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 |
|
| 26 |
|
| 27 |
|
| 28 |
IMPLEMENTATION |
| 29 |
|
| 30 |
FUNCTION GetStructureInfoId(ext:String):Integer; |
| 31 |
VAR |
| 32 |
i:Integer; |
| 33 |
BEGIN |
| 34 |
FOR i:=0 TO High(structure_infos) DO BEGIN |
| 35 |
IF structure_infos[i].extension=ext THEN BEGIN |
| 36 |
Result:=i; |
| 37 |
Exit; |
| 38 |
END; |
| 39 |
END; |
| 40 |
Result:=-1; |
| 41 |
END; |
| 42 |
|
| 43 |
FUNCTION GetDataType(typeid:Byte):String; |
| 44 |
BEGIN |
| 45 |
CASE typeid OF |
| 46 |
1..4: Result:='Int'+IntToStr(typeid*8); |
| 47 |
5..8: Result:='Int'+IntToStr((typeid-4)*8); |
| 48 |
9: Result:='Float'; |
| 49 |
10: Result:='BitSet'; |
| 50 |
11..255: Result:='String('+IntToStr(typeid-10)+')'; |
| 51 |
END; |
| 52 |
END; |
| 53 |
|
| 54 |
PROCEDURE AddEntry(_ext:String; _name:String; _offset:LongWord; _datatype:Byte; _description:String); |
| 55 |
VAR |
| 56 |
sid:Word; |
| 57 |
BEGIN |
| 58 |
sid:=GetStructureInfoId(_ext); |
| 59 |
IF sid>=0 THEN BEGIN |
| 60 |
WITH structure_infos[sid] DO BEGIN |
| 61 |
SetLength(entries,Length(entries)+1); |
| 62 |
WITH entries[High(entries)] DO BEGIN |
| 63 |
name:=_name; |
| 64 |
offset:=_offset; |
| 65 |
datatype:=_datatype; |
| 66 |
description:=_description; |
| 67 |
END; |
| 68 |
END; |
| 69 |
END; |
| 70 |
END; |
| 71 |
|
| 72 |
PROCEDURE AddExtension(_ext:String; _typedesc:String); |
| 73 |
BEGIN |
| 74 |
IF GetStructureInfoId(_ext)<0 THEN BEGIN |
| 75 |
SetLength(structure_infos,Length(structure_infos)+1); |
| 76 |
WITH structure_infos[High(structure_infos)] DO BEGIN |
| 77 |
extension:='TXMP'; |
| 78 |
typedesc:='Texture'; |
| 79 |
END; |
| 80 |
END; |
| 81 |
END; |
| 82 |
|
| 83 |
BEGIN |
| 84 |
AddExtension('TXMP','Texture'); |
| 85 |
AddEntry('TXMP','Fading',$88,10,'Fading-Bitset'); |
| 86 |
AddEntry('TXMP','Depth',$89,10,'Depth-Bitset'); |
| 87 |
AddEntry('TXMP','Width',$8C,2,'x-resolution of image'); |
| 88 |
AddEntry('TXMP','Height',$8E,2,'y-resolution of image'); |
| 89 |
AddEntry('TXMP','Storetype',$90,10,'Storetype-Bitset'); |
| 90 |
AddEntry('TXMP','Raw-Link',$9C,8,'Address of the image data in the .raw-file'); |
| 91 |
END. |