141 |
|
baselink, lastlink: Integer; |
142 |
|
links: Integer; |
143 |
|
Data: TStream; |
144 |
+ |
read: Integer; |
145 |
+ |
char: Byte; |
146 |
+ |
foundzeros: Byte; |
147 |
|
begin |
148 |
+ |
SetLength(Result, 0); |
149 |
+ |
|
150 |
|
ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $18, 4, @baselink); |
151 |
|
ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links); |
152 |
|
if links > 0 then |
153 |
|
begin |
154 |
|
ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + (links - 1) * 4, 4, @lastlink); |
150 |
– |
// SetLength(Data, lastlink + 1024); |
155 |
|
Data := nil; |
156 |
|
TAccess_OniArchive(ConManager.Connection[ConnectionID]).LoadRawOffset( |
157 |
|
False, baselink, lastlink + 1024, Data); |
158 |
< |
// TOniDataDat(connection).LoadRawOffset(False, baselink, lastlink + 1024, Data); |
159 |
< |
// connection.LoadRawFile(fileid,$1C,baselink,lastlink+1024,False,@data[0]); |
160 |
< |
raise ENotImplemented.Create('RawList.SUBT'); |
161 |
< |
end; |
162 |
< |
{ |
159 |
< |
k := 0; |
160 |
< |
for j := 0 to 1024 do |
161 |
< |
begin |
162 |
< |
if (Data[lastlink + j] = $00) or (j = 1024) then |
158 |
> |
|
159 |
> |
foundzeros := 0; |
160 |
> |
repeat |
161 |
> |
read := Data.Read(char, 1); |
162 |
> |
if (read > 0) and (char = 0) then |
163 |
|
begin |
164 |
< |
if j < 1024 then |
165 |
< |
begin |
166 |
< |
if k = 0 then |
167 |
< |
begin |
168 |
< |
k := 1; |
169 |
< |
end |
170 |
< |
else |
171 |
< |
begin |
172 |
< |
SetLength(Result, 1); |
173 |
< |
Result[0].src_offset := $18; |
174 |
< |
Result[0].raw_addr := baselink; |
175 |
< |
Result[0].raw_size := lastlink + j; |
176 |
< |
Break; |
177 |
< |
end; |
178 |
< |
end; |
164 |
> |
Inc(foundzeros); |
165 |
|
end; |
166 |
+ |
until (read = 0) or (foundzeros = 2); |
167 |
+ |
|
168 |
+ |
if foundzeros = 2 then |
169 |
+ |
begin |
170 |
+ |
SetLength(Result, 1); |
171 |
+ |
Result[0].SrcID := FileID; |
172 |
+ |
Result[0].SrcOffset := $18; |
173 |
+ |
Result[0].RawAddr := baselink; |
174 |
+ |
Result[0].RawSize := Data.Position; |
175 |
+ |
Result[0].LocSep := False; |
176 |
|
end; |
177 |
|
end; |
182 |
– |
} |
178 |
|
end; |
179 |
|
|
180 |
|
|