| 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. |