ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/releases/0.16a/Unit4_Exporters.pas
Revision: 21
Committed: Sat Aug 26 19:11:49 2006 UTC (19 years, 1 month ago) by alloc
Content type: text/x-pascal
File size: 6324 byte(s)
Log Message:

File Contents

# Content
1 UNIT Unit4_Exporters;
2 INTERFACE
3 USES Classes, StrUtils, SysUtils, Math, Unit3_data, Unit6_imgfuncs;
4
5 PROCEDURE ExportDefLine(fileid:LongWord; line:String; create:Boolean);
6 PROCEDURE ExportDefFileHeader(fileid:LongWord);
7 PROCEDURE ExportDatFile(fileid:LongWord);
8
9 FUNCTION ExportTRAC(fileid:LongWord; convert:Boolean):Integer;
10 FUNCTION ExportTXAN(fileid:LongWord; convert:Boolean):Integer;
11 FUNCTION ExportTXMB(fileid:LongWord; convert:Boolean):Integer;
12 FUNCTION ExportTXMP(fileid:LongWord; convert:Boolean):Integer;
13 VAR
14 ExportHandlers:Array[1..5] OF TExportHandlers=(
15 (Ext:'ABNA'; needed:False),
16 //(Ext:'AGDB'; needed:False),
17 (Ext:'TRAC'; needed:True; Handler:ExportTRAC),
18 (Ext:'TXAN'; needed:True; Handler:ExportTXAN),
19 (Ext:'TXMB'; needed:True; Handler:ExportTXMB),
20 (Ext:'TXMP'; needed:True; Handler:ExportTXMP)
21 );
22
23
24
25 IMPLEMENTATION
26 USES Unit2_functions;
27
28 PROCEDURE ExportDefLine(fileid:LongWord; line:String; create:Boolean);
29 VAR
30 filestream:TFileStream;
31 data:Tdata;
32 i:LongWord;
33 BEGIN
34 SetLength(data,Length(line)+2);
35 FOR i:=1 TO Length(line) DO
36 data[i-1]:=Ord(line[i]);
37 data[Length(line)]:=13;
38 data[Length(line)+1]:=10;
39 {
40 IF create THEN
41 filestream:=TFileStream.Create(GetExtractPath+'\'+GetWinFileName(fileid,'_DEF_'),fmCreate)
42 ELSE BEGIN
43 filestream:=TFileStream.Create(GetExtractPath+'\'+GetWinFileName(fileid,'_DEF_'),fmOpenWrite);
44 filestream.Seek(0,soFromEnd);
45 END;
46 filestream.Write(data[0],Length(data));
47 filestream.Free;
48 }
49 END;
50
51 PROCEDURE ExportDefFileHeader(fileid:LongWord);
52 BEGIN
53 IF NOT DirectoryExists(GetExtractPath) THEN
54 CreateDir(GetExtractPath);
55 WITH dat_files[fileid] DO
56 ExportDefLine(fileid,FormatNumber(fileid,5,'0')+':'+Name+':'+Extension+':'+IntToHex(Size,8)+':'+IntToHex(FileType,8),True);
57 END;
58
59 PROCEDURE ExportDatFile(fileid:LongWord);
60 VAR
61 filestream:TFileStream;
62 data:Tdata;
63 BEGIN
64 data:=LoadDatFile(fileid);
65 filestream:=TFileStream.Create(GetExtractPath+'\'+GetWinFileName(fileid,'_DAT_'),fmCreate);
66 filestream.Write(data[0],Length(data));
67 filestream.Free;
68 END;
69
70
71 FUNCTION ExportTRAC;
72 VAR
73 link:LongWord;
74 linkcount:Word;
75 i:LongWord;
76 BEGIN
77 Result:=export_noerror;
78
79 LoadDatFilePart(fileid,$18,SizeOf(link),@link);
80 link:=link DIV 256;
81 ExportDefLine(fileid,FormatNumber(0,4,'0')+':LINKtoTRAC:'+FormatNumber(link,5,'0')+':'+dat_files[link].Name+':'+dat_files[link].Extension,False);
82
83 LoadDatFilePart(fileid,$1E,SizeOf(linkcount),@linkcount);
84 ExportDefLine(fileid,'TRAMLINKS:'+FormatNumber(linkcount,4,'0'),False);
85 FOR i:=1 TO linkcount DO BEGIN
86 LoadDatFilePart(fileid,$20+(i-1)*12+8,SizeOf(link),@link);
87 link:=link DIV 256;
88 ExportDefLine(fileid,FormatNumber(i,4,'0')+':LINKtoTRAM:'+FormatNumber(link,5,'0')+':'+dat_files[link].Name+':'+dat_files[link].Extension,False);
89 END;
90 END;
91
92 FUNCTION ExportTXAN;
93 VAR
94 loop_speed,unknown:Word;
95 linkcount:LongWord;
96 link:LongWord;
97 i:Byte;
98 BEGIN
99 Result:=export_noerror;
100
101 LoadDatFilePart(fileid,$14,SizeOf(loop_speed),@loop_speed);
102 LoadDatFilePart(fileid,$16,SizeOf(unknown),@unknown);
103 ExportDefLine(fileid,'LOOPSPEED:'+FormatNumber(loop_speed,2,'0'),False);
104 ExportDefLine(fileid,'UNKNOWN:'+FormatNumber(unknown,2,'0'),False);
105
106 LoadDatFilePart(fileid,$1C,SizeOf(linkcount),@linkcount);
107 ExportDefLine(fileid,'TXMPLINKS:'+FormatNumber(linkcount,4,'0'),False);
108 FOR i:=0 TO linkcount-1 DO BEGIN
109 LoadDatFilePart(fileid,$20+i*4,SizeOf(link),@link);
110 link:=link DIV 256;
111 IF link=0 THEN link:=fileid-1;
112 ExportDefLine(fileid,FormatNumber(i,4,'0')+':LINKtoTXMP:'+FormatNumber(link,5,'0')+':'+dat_files[link].Name+':'+dat_files[link].Extension,False);
113 END;
114 END;
115
116 FUNCTION ExportTXMB;
117 VAR
118 filestream:TFileStream;
119 subfile:Byte;
120 linkcount:LongWord;
121 link:LongWord;
122 width,height:Word;
123 cols,rows:Word;
124 i:Byte;
125 img:TImgPackage;
126 data:Tdata;
127 BEGIN
128 Result:=export_noerror;
129 subfile:=1;
130
131 LoadDatFilePart(fileid,$10,SizeOf(width),@width);
132 LoadDatFilePart(fileid,$12,SizeOf(height),@height);
133 LoadDatFilePart(fileid,$18,SizeOf(cols),@cols);
134 LoadDatFilePart(fileid,$1A,SizeOf(rows),@rows);
135 ExportDefLine(fileid,'WIDTH:'+FormatNumber(width,4,'0'),False);
136 ExportDefLine(fileid,'HEIGHT:'+FormatNumber(height,4,'0'),False);
137 ExportDefLine(fileid,'COLS:'+FormatNumber(cols,2,'0'),False);
138 ExportDefLine(fileid,'ROWS:'+FormatNumber(rows,2,'0'),False);
139
140 LoadDatFilePart(fileid,$1C,SizeOf(linkcount),@linkcount);
141 ExportDefLine(fileid,'TXMPLINKS:'+FormatNumber(linkcount,4,'0'),False);
142 FOR i:=0 TO linkcount-1 DO BEGIN
143 LoadDatFilePart(fileid,$20+i*4,SizeOf(link),@link);
144 link:=link DIV 256;
145 IF link=0 THEN link:=fileid-1;
146 ExportDefLine(fileid,FormatNumber(i,4,'0')+':LINKtoTXMP:'+FormatNumber(link,5,'0')+':'+dat_files[link].Name+':'+dat_files[link].Extension,False);
147 END;
148
149 IF convert THEN BEGIN
150 img:=LoadTXMBconnected(fileid);
151 data:=ImgdataToBmp(img.imgx,img.imgy,img.imgdepth,img.storetype,img.imgdata);
152 filestream:=TFileStream.Create(GetExtractPath+'\'+GetWinFileName(fileid,FormatNumber(subfile,2,'0')+'-ImgData')+'.bmp',fmCreate);
153 filestream.Write(data[0],Length(data));
154 filestream.Free;
155 END;
156 END;
157
158 FUNCTION ExportTXMP;
159 VAR
160 filestream:TFileStream;
161 subfile:Byte;
162 img:TImgPackage;
163 BEGIN
164 Result:=export_noerror;
165 subfile:=1;
166
167 img:=LoadImgData(fileid);
168 {
169 filestream:=TFileStream.Create(GetExtractPath+'\'+GetWinFileName(fileid,FormatNumber(subfile,2,'0')+'-ImgData'),fmCreate);
170 filestream.Write(img.imgdata[0],Length(img.imgdata));
171 filestream.Free;
172 }
173 IF convert THEN BEGIN
174 img.imgdata:=ImgdataToBMP(img.imgx,img.imgy,img.imgdepth,img.storetype,img.imgdata);
175 filestream:=TFileStream.Create(GetExtractPath+'\'+GetWinFileName(fileid,FormatNumber(subfile,2,'0')+'-ImgData')+'.bmp',fmCreate);
176 filestream.Write(img.imgdata[0],Length(img.imgdata));
177 filestream.Free;
178 END;
179 END;
180
181 END.