FireBirdLib - Topfield TMS PVR TAP Programming Library
FlashTimerDecode.c
Go to the documentation of this file.
1#include <string.h>
2#include "FBLib_flash.h"
3
4static bool FlashTimerDecode_ST_TMSS(TYPE_Timer_TMSS *Data, tFlashTimer *TimerInfo)
5{
7
8 memset(TimerInfo, 0, sizeof(tFlashTimer));
9
10 TimerInfo->TunerIndex = Data->TimerInfo.TunerIndex;
11 TimerInfo->RecMode = Data->TimerInfo.RecMode;
12 TimerInfo->DemuxPath = Data->TimerInfo.DemuxPath;
13 TimerInfo->ManualRec = Data->TimerInfo.ManualRec;
14 TimerInfo->unused1 = Data->TimerInfo.unused1;
15 TimerInfo->SatIndex = Data->TimerInfo.SatIndex;
16 TimerInfo->ServiceType = Data->TimerInfo.ServiceType;
17 TimerInfo->ReservationType = Data->TimerInfo.ReservationType;
18 TimerInfo->unused2 = Data->TimerInfo.unused2;
19 TimerInfo->ServiceID = Data->TimerInfo.ServiceID;
20 TimerInfo->Duration = Data->TimerInfo.Duration;
21 TimerInfo->unused3 = Data->TimerInfo.unused3;
22 strncpy(TimerInfo->FileName, Data->TimerInfo.FileName, 130);
23 TimerInfo->StartTime = Data->TimerInfo.StartTime;
24 TimerInfo->EndTime = Data->TimerInfo.EndTime;
25 TimerInfo->PMTPID = Data->TimerInfo.PMTPID;
26 TimerInfo->isRec = Data->TimerInfo.isRec;
27 TimerInfo->NameSet = Data->TimerInfo.NameSet;
28 TimerInfo->unused4 = Data->TimerInfo.unused4;
29 TimerInfo->EPGMarker = Data->TimerInfo.EPGMarker;
30 TimerInfo->unused5 = Data->TimerInfo.unused5;
31 TimerInfo->unknown1 = Data->TimerInfo.unknown1;
32 TimerInfo->EventID1 = Data->TimerInfo.EventID1;
33 TimerInfo->EventID2 = Data->TimerInfo.EventID2;
34 TimerInfo->ServiceIndex = Data->TimerInfo.ServiceIndex;
35 memcpy(TimerInfo->unused8, Data->TimerInfo.unused8, sizeof(Data->TimerInfo.unused8));
36 TimerInfo->IceTV = Data->TimerInfo.IceTV;
37 memcpy(TimerInfo->unused9, Data->TimerInfo.unused9, sizeof(Data->TimerInfo.unused9));
38
39 TimerInfo->TpInfo.SatIndex = Data->TpInfo.SatIdx;
40 TimerInfo->TpInfo.Polarisation = Data->TpInfo.Polar;
41 TimerInfo->TpInfo.ModSystem = Data->TpInfo.ModulationSystem;
42 TimerInfo->TpInfo.Modulation = Data->TpInfo.ModulationType;
43 TimerInfo->TpInfo.FEC = Data->TpInfo.FECMode;
44 TimerInfo->TpInfo.Pilot = Data->TpInfo.Pilot;
45 TimerInfo->TpInfo.Frequency = Data->TpInfo.Frequency;
46 TimerInfo->TpInfo.SymbolRate = Data->TpInfo.SymbolRate;
47 TimerInfo->TpInfo.TSID = Data->TpInfo.TSID;
48 TimerInfo->TpInfo.ClockSync = Data->TpInfo.AllowTimeSync;
49 TimerInfo->TpInfo.OriginalNetworkID = Data->TpInfo.OriginalNetworkID;
50 TimerInfo->TpInfo.unused1 = Data->TpInfo.TPMode;
51 TimerInfo->TpInfo.unused2 = Data->TpInfo.unused2;
52 TimerInfo->TpInfo.unused3 = Data->TpInfo.unused3;
53 TimerInfo->TpInfo.unused4 = Data->TpInfo.unused4;
54
55 TRACEEXIT();
56 return TRUE;
57}
58
59static bool FlashTimerDecode_ST_TMST(TYPE_Timer_TMST *Data, tFlashTimer *TimerInfo)
60{
61 TRACEENTER();
62
63 memset(TimerInfo, 0, sizeof(tFlashTimer));
64
65 TimerInfo->TunerIndex = Data->TimerInfo.TunerIndex;
66 TimerInfo->RecMode = Data->TimerInfo.RecMode;
67 TimerInfo->DemuxPath = Data->TimerInfo.DemuxPath;
68 TimerInfo->ManualRec = Data->TimerInfo.ManualRec;
69 TimerInfo->unused1 = Data->TimerInfo.unused1;
70 TimerInfo->SatIndex = Data->TimerInfo.SatIndex;
71 TimerInfo->ServiceType = Data->TimerInfo.ServiceType;
72 TimerInfo->ReservationType = Data->TimerInfo.ReservationType;
73 TimerInfo->unused2 = Data->TimerInfo.unused2;
74 TimerInfo->ServiceID = Data->TimerInfo.ServiceID;
75 TimerInfo->Duration = Data->TimerInfo.Duration;
76 TimerInfo->unused3 = Data->TimerInfo.unused3;
77 strncpy(TimerInfo->FileName, Data->TimerInfo.FileName, 130);
78 TimerInfo->StartTime = Data->TimerInfo.StartTime;
79 TimerInfo->EndTime = Data->TimerInfo.EndTime;
80 TimerInfo->PMTPID = Data->TimerInfo.PMTPID;
81 TimerInfo->isRec = Data->TimerInfo.isRec;
82 TimerInfo->NameSet = Data->TimerInfo.NameSet;
83 TimerInfo->unused4 = Data->TimerInfo.unused4;
84 TimerInfo->EPGMarker = Data->TimerInfo.EPGMarker;
85 TimerInfo->unused5 = Data->TimerInfo.unused5;
86 TimerInfo->unknown1 = Data->TimerInfo.unknown1;
87 TimerInfo->EventID1 = Data->TimerInfo.EventID1;
88 TimerInfo->EventID2 = Data->TimerInfo.EventID2;
89 TimerInfo->ServiceIndex = Data->TimerInfo.ServiceIndex;
90 memcpy(TimerInfo->unused8, Data->TimerInfo.unused8, sizeof(Data->TimerInfo.unused8));
91 TimerInfo->IceTV = Data->TimerInfo.IceTV;
92 memcpy(TimerInfo->unused9, Data->TimerInfo.unused9, sizeof(Data->TimerInfo.unused9));
93 memcpy(TimerInfo->unused10, Data->unused10, sizeof(Data->unused10));
94
95 TimerInfo->TpInfo.SatIndex = Data->TpInfo.SatIdx;
96 TimerInfo->TpInfo.ChannelNr = Data->TpInfo.ChannelNr;
97 TimerInfo->TpInfo.Bandwidth = Data->TpInfo.Bandwidth;
98 TimerInfo->TpInfo.Frequency = Data->TpInfo.Frequency;
99 TimerInfo->TpInfo.TSID = Data->TpInfo.TSID;
100 TimerInfo->TpInfo.LPHP = Data->TpInfo.LPHP;
101 TimerInfo->TpInfo.OriginalNetworkID = Data->TpInfo.OriginalNetworkID;
102 TimerInfo->TpInfo.NetworkID = Data->TpInfo.NetworkID;
103 TimerInfo->TpInfo.unused1 = Data->TpInfo.unused1;
104 TimerInfo->TpInfo.unused2 = Data->TpInfo.unused2;
105
106 TRACEEXIT();
107 return TRUE;
108}
109
110static bool FlashTimerDecode_ST_TMST200(TYPE_Timer_TMST200 *Data, tFlashTimer *TimerInfo)
111{
112 TRACEENTER();
113
114 memset(TimerInfo, 0, sizeof(tFlashTimer));
115
116 TimerInfo->TunerIndex = Data->TimerInfo.TunerIndex;
117 TimerInfo->RecMode = Data->TimerInfo.RecMode;
118 TimerInfo->DemuxPath = Data->TimerInfo.DemuxPath;
119 TimerInfo->ManualRec = Data->TimerInfo.ManualRec;
120 TimerInfo->unused1 = Data->TimerInfo.unused1;
121 TimerInfo->SatIndex = Data->TimerInfo.SatIndex;
122 TimerInfo->ServiceType = Data->TimerInfo.ServiceType;
123 TimerInfo->ReservationType = Data->TimerInfo.ReservationType;
124 TimerInfo->unused2 = Data->TimerInfo.unused2;
125 TimerInfo->ServiceID = Data->TimerInfo.ServiceID;
126 TimerInfo->Duration = Data->TimerInfo.Duration;
127 TimerInfo->unused3 = Data->TimerInfo.unused3;
128 strncpy(TimerInfo->FileName, Data->TimerInfo.FileName, 130);
129 TimerInfo->StartTime = Data->TimerInfo.StartTime;
130 TimerInfo->EndTime = Data->TimerInfo.EndTime;
131 TimerInfo->PMTPID = Data->TimerInfo.PMTPID;
132 TimerInfo->isRec = Data->TimerInfo.isRec;
133 TimerInfo->NameSet = Data->TimerInfo.NameSet;
134 TimerInfo->unused4 = Data->TimerInfo.unused4;
135 TimerInfo->EPGMarker = Data->TimerInfo.EPGMarker;
136 TimerInfo->unused5 = Data->TimerInfo.unused5;
137 TimerInfo->unknown1 = Data->TimerInfo.unknown1;
138 TimerInfo->EventID1 = Data->TimerInfo.EventID1;
139 TimerInfo->EventID2 = Data->TimerInfo.EventID2;
140 TimerInfo->ServiceIndex = Data->TimerInfo.ServiceIndex;
141 memcpy(TimerInfo->unused8, Data->TimerInfo.unused8, sizeof(Data->TimerInfo.unused8));
142 TimerInfo->IceTV = Data->TimerInfo.IceTV;
143 memcpy(TimerInfo->unused9, Data->TimerInfo.unused9, sizeof(Data->TimerInfo.unused9));
144
145 TimerInfo->TpInfo.SatIndex = Data->TpInfo.SatIdx;
146 TimerInfo->TpInfo.ChannelNr = Data->TpInfo.ChannelNr;
147 TimerInfo->TpInfo.Bandwidth = Data->TpInfo.Bandwidth;
148 TimerInfo->TpInfo.Frequency = Data->TpInfo.Frequency;
149 TimerInfo->TpInfo.TSID = Data->TpInfo.TSID;
150 TimerInfo->TpInfo.LPHP = Data->TpInfo.LPHP;
151 TimerInfo->TpInfo.OriginalNetworkID = Data->TpInfo.OriginalNetworkID;
152 TimerInfo->TpInfo.NetworkID = Data->TpInfo.NetworkID;
153 TimerInfo->TpInfo.unused1 = Data->TpInfo.unused1;
154 TimerInfo->TpInfo.unused2 = Data->TpInfo.unused2;
155
156 TRACEEXIT();
157 return TRUE;
158}
159
160static bool FlashTimerDecode_ST_TMST360(TYPE_Timer_TMST360 *Data, tFlashTimer *TimerInfo)
161{
162 TRACEENTER();
163
164 memset(TimerInfo, 0, sizeof(tFlashTimer));
165
166 TimerInfo->TunerIndex = Data->TimerInfo.TunerIndex;
167 TimerInfo->RecMode = Data->TimerInfo.RecMode;
168 TimerInfo->DemuxPath = Data->TimerInfo.DemuxPath;
169 TimerInfo->ManualRec = Data->TimerInfo.ManualRec;
170 TimerInfo->unused1 = Data->TimerInfo.unused1;
171 TimerInfo->SatIndex = Data->TimerInfo.SatIndex;
172 TimerInfo->ServiceType = Data->TimerInfo.ServiceType;
173 TimerInfo->ReservationType = Data->TimerInfo.ReservationType;
174 TimerInfo->unused2 = Data->TimerInfo.unused2;
175 TimerInfo->ServiceID = Data->TimerInfo.ServiceID;
176 TimerInfo->Duration = Data->TimerInfo.Duration;
177 TimerInfo->unused3 = Data->TimerInfo.unused3;
178 strncpy(TimerInfo->FileName, Data->TimerInfo.FileName, 130);
179 TimerInfo->StartTime = Data->TimerInfo.StartTime;
180 TimerInfo->EndTime = Data->TimerInfo.EndTime;
181 TimerInfo->PMTPID = Data->TimerInfo.PMTPID;
182 TimerInfo->isRec = Data->TimerInfo.isRec;
183 TimerInfo->NameSet = Data->TimerInfo.NameSet;
184 TimerInfo->unused4 = Data->TimerInfo.unused4;
185 TimerInfo->EPGMarker = Data->TimerInfo.EPGMarker;
186 TimerInfo->unused5 = Data->TimerInfo.unused5;
187 TimerInfo->unknown1 = Data->TimerInfo.unknown1;
188 TimerInfo->EventID1 = Data->TimerInfo.EventID1;
189 TimerInfo->EventID2 = Data->TimerInfo.EventID2;
190 TimerInfo->ServiceIndex = Data->TimerInfo.ServiceIndex;
191 memcpy(TimerInfo->unused8, Data->TimerInfo.unused8, sizeof(Data->TimerInfo.unused8));
192 TimerInfo->IceTV = Data->TimerInfo.IceTV;
193 memcpy(TimerInfo->unused9, Data->TimerInfo.unused9, sizeof(Data->TimerInfo.unused9));
194 memcpy(TimerInfo->unused10, Data->unused10, sizeof(Data->unused10));
195 TimerInfo->rs_timestamp1 = Data->rs_timestamp1;
196
197 memcpy(TimerInfo->rs_episodeCRID, Data->rs_episodeCRID, sizeof(Data->rs_episodeCRID));
198 memcpy(TimerInfo->rs_seriesCRID, Data->rs_seriesCRID, sizeof(Data->rs_episodeCRID));
199
200 TimerInfo->rs_unknown1 = Data->rs_unknown1;
201 TimerInfo->rs_unknown2 = Data->rs_unknown2;
202 TimerInfo->rs_timestamp2 = Data->rs_timestamp2;
203 TimerInfo->rs_unknown3 = Data->rs_unknown3;
204 TimerInfo->rs_unknown4 = Data->rs_unknown4;
205
206 TimerInfo->TpInfo.SatIndex = Data->TpInfo.SatIdx;
207 TimerInfo->TpInfo.ChannelNr = Data->TpInfo.ChannelNr;
208 TimerInfo->TpInfo.Bandwidth = Data->TpInfo.Bandwidth;
209 TimerInfo->TpInfo.Frequency = Data->TpInfo.Frequency;
210 TimerInfo->TpInfo.TSID = Data->TpInfo.TSID;
211 TimerInfo->TpInfo.LPHP = Data->TpInfo.LPHP;
212 TimerInfo->TpInfo.OriginalNetworkID = Data->TpInfo.OriginalNetworkID;
213 TimerInfo->TpInfo.NetworkID = Data->TpInfo.NetworkID;
214 TimerInfo->TpInfo.unused1 = Data->TpInfo.unused1;
215 TimerInfo->TpInfo.unused2 = Data->TpInfo.unused2;
216
217 TRACEEXIT();
218 return TRUE;
219}
220
221static bool FlashTimerDecode_ST_TMSC(TYPE_Timer_TMSC *Data, tFlashTimer *TimerInfo)
222{
223 TRACEENTER();
224
225 memset(TimerInfo, 0, sizeof(tFlashTimer));
226
227 TimerInfo->TunerIndex = Data->TimerInfo.TunerIndex;
228 TimerInfo->RecMode = Data->TimerInfo.RecMode;
229 TimerInfo->DemuxPath = Data->TimerInfo.DemuxPath;
230 TimerInfo->ManualRec = Data->TimerInfo.ManualRec;
231 TimerInfo->unused1 = Data->TimerInfo.unused1;
232 TimerInfo->SatIndex = Data->TimerInfo.SatIndex;
233 TimerInfo->ServiceType = Data->TimerInfo.ServiceType;
234 TimerInfo->ReservationType = Data->TimerInfo.ReservationType;
235 TimerInfo->unused2 = Data->TimerInfo.unused2;
236 TimerInfo->ServiceID = Data->TimerInfo.ServiceID;
237 TimerInfo->Duration = Data->TimerInfo.Duration;
238 TimerInfo->unused3 = Data->TimerInfo.unused3;
239 strncpy(TimerInfo->FileName, Data->TimerInfo.FileName, 130);
240 TimerInfo->StartTime = Data->TimerInfo.StartTime;
241 TimerInfo->EndTime = Data->TimerInfo.EndTime;
242 TimerInfo->PMTPID = Data->TimerInfo.PMTPID;
243 TimerInfo->isRec = Data->TimerInfo.isRec;
244 TimerInfo->NameSet = Data->TimerInfo.NameSet;
245 TimerInfo->unused4 = Data->TimerInfo.unused4;
246 TimerInfo->EPGMarker = Data->TimerInfo.EPGMarker;
247 TimerInfo->unused5 = Data->TimerInfo.unused5;
248 TimerInfo->unknown1 = Data->TimerInfo.unknown1;
249 TimerInfo->EventID1 = Data->TimerInfo.EventID1;
250 TimerInfo->EventID2 = Data->TimerInfo.EventID2;
251 TimerInfo->ServiceIndex = Data->TimerInfo.ServiceIndex;
252 memcpy(TimerInfo->unused8, Data->TimerInfo.unused8, sizeof(Data->TimerInfo.unused8));
253 TimerInfo->IceTV = Data->TimerInfo.IceTV;
254 memcpy(TimerInfo->unused9, Data->TimerInfo.unused9, sizeof(Data->TimerInfo.unused9));
255
256 TimerInfo->TpInfo.Frequency = Data->TpInfo.Frequency;
257 TimerInfo->TpInfo.SymbolRate = Data->TpInfo.SymbolRate;
258 TimerInfo->TpInfo.TSID = Data->TpInfo.TSID;
259 TimerInfo->TpInfo.OriginalNetworkID = Data->TpInfo.OriginalNetworkID;
260 TimerInfo->TpInfo.Modulation = Data->TpInfo.ModulationType;
261 TimerInfo->TpInfo.unused1 = Data->TpInfo.unused1;
262
263 TRACEEXIT();
264 return TRUE;
265}
266
267bool FlashTimerDecode(void *Data, tFlashTimer *TimerInfo)
268{
269 bool ret;
270
271 TRACEENTER();
272
273 if(!Data || !TimerInfo)
274 {
275 TRACEEXIT();
276 return FALSE;
277 }
278
279 ret = FALSE;
280 switch(GetSystemType())
281 {
282 //Unknown and old 5k/6k systems are not supported
283 case ST_UNKNOWN:
284 case ST_S:
285 case ST_ST:
286 case ST_T:
287 case ST_C:
288 case ST_CT:
289 case ST_T5700:
290 case ST_T5800:
291 case ST_TF7k7HDPVR: break;
292
293 case ST_TMSS:
294 {
295 ret = FlashTimerDecode_ST_TMSS(Data, TimerInfo);
296 break;
297 }
298
299 case ST_TMST:
300 {
301 //Depending on the firmware, some Australian machines use the sat structures (200 bytes)
302 if(FlashTimerStructSize() == 200)
303 ret = FlashTimerDecode_ST_TMST200(Data, TimerInfo);
304 else if(FlashTimerStructSize() == 360)
305 ret = FlashTimerDecode_ST_TMST360(Data, TimerInfo);
306 else
307 ret = FlashTimerDecode_ST_TMST(Data, TimerInfo);
308
309 break;
310 }
311
312 case ST_TMSC:
313 {
314 ret = FlashTimerDecode_ST_TMSC(Data, TimerInfo);
315 break;
316 }
317
318 case ST_NRTYPES: break;
319 }
320
321 TRACEEXIT();
322 return ret;
323}
324
325
326bool FlashTimerGetInfo(int TimerIndex, tFlashTimer *TimerInfo)
327{
328 TRACEENTER();
329
330 bool ret;
331
332 //TimerIndex out of range
333 if((TimerIndex < 0) || (TimerIndex >= TAP_Timer_GetTotalNum()))
334 {
335 TRACEEXIT();
336 return FALSE;
337 }
338
339 //TimerInfo is NULL
340 if(!TimerInfo)
341 {
342 TRACEEXIT();
343 return FALSE;
344 }
345
346 ret = FALSE;
347 switch(GetSystemType())
348 {
349 //Unknown and old 5k/6k systems are not supported
350 case ST_UNKNOWN:
351 case ST_S:
352 case ST_ST:
353 case ST_T:
354 case ST_C:
355 case ST_CT:
356 case ST_T5700:
357 case ST_T5800:
358 case ST_TF7k7HDPVR: break;
359
360 case ST_TMSS:
361 {
362 TYPE_Timer_TMSS *p;
363
364 p = (TYPE_Timer_TMSS*)(FIS_vFlashBlockTimer());
365 if(p)
366 {
367 p = p + TimerIndex;
368 ret = FlashTimerDecode(p, TimerInfo);
369 }
370 break;
371 }
372
373 case ST_TMST:
374 {
375 //Depending on the firmware, some Australian machines use the sat structures (200 bytes)
376 //DMC 2015-11-06 The new AU 5300 has a 360 byte structure
377 if(FlashTimerStructSize() == 200)
378 {
379 TYPE_Timer_TMST200 *p;
380
381 p = (TYPE_Timer_TMST200*)(FIS_vFlashBlockTimer());
382 if(p)
383 {
384 p = p + TimerIndex;
385 ret = FlashTimerDecode(p, TimerInfo);
386 }
387 break;
388 }
389 else if(FlashTimerStructSize() == 360)
390 {
391 TYPE_Timer_TMST360 *p;
392
393 p = (TYPE_Timer_TMST360*)(FIS_vFlashBlockTimer());
394 if(p)
395 {
396 p = p + TimerIndex;
397 ret = FlashTimerDecode(p, TimerInfo);
398 }
399 break;
400 }
401 else
402 {
403 TYPE_Timer_TMST *p;
404
405 p = (TYPE_Timer_TMST*)(FIS_vFlashBlockTimer());
406 if(p)
407 {
408 p = p + TimerIndex;
409 ret = FlashTimerDecode(p, TimerInfo);
410 }
411 break;
412 }
413 }
414
415 case ST_TMSC:
416 {
417 TYPE_Timer_TMSC *p;
418
419 p = (TYPE_Timer_TMSC*)(FIS_vFlashBlockTimer());
420 if(p)
421 {
422 p = p + TimerIndex;
423 ret = FlashTimerDecode(p, TimerInfo);
424 }
425 break;
426 }
427
428 case ST_NRTYPES: break;
429 }
430
431 TRACEEXIT();
432 return ret;
433}
dword FIS_vFlashBlockTimer(void)
bool FlashTimerGetInfo(int TimerIndex, tFlashTimer *TimerInfo)
bool FlashTimerDecode(void *Data, tFlashTimer *TimerInfo)
int FlashTimerStructSize(void)
SYSTEM_TYPE GetSystemType(void)
Definition: GetSystemType.c:3
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
@ ST_CT
Definition: libFireBird.h:77
@ ST_T
Definition: libFireBird.h:69
@ ST_TMSC
Definition: libFireBird.h:74
@ ST_UNKNOWN
Definition: libFireBird.h:67
@ ST_T5700
Definition: libFireBird.h:71
@ ST_TMST
Definition: libFireBird.h:73
@ ST_T5800
Definition: libFireBird.h:75
@ ST_TMSS
Definition: libFireBird.h:72
@ ST_ST
Definition: libFireBird.h:76
@ ST_NRTYPES
Definition: libFireBird.h:79
@ ST_TF7k7HDPVR
Definition: libFireBird.h:78
@ ST_S
Definition: libFireBird.h:68
@ ST_C
Definition: libFireBird.h:70
dword StartTime
Definition: libFireBird.h:1674
byte unused9[13]
Definition: libFireBird.h:1688
char rs_episodeCRID[64]
Definition: libFireBird.h:1691
dword rs_unknown4
Definition: libFireBird.h:1697
dword rs_timestamp1
Definition: libFireBird.h:1690
dword rs_unknown2
Definition: libFireBird.h:1694
dword EventID1
Definition: libFireBird.h:1683
char rs_seriesCRID[64]
Definition: libFireBird.h:1692
dword EventID2
Definition: libFireBird.h:1684
dword unknown1
Definition: libFireBird.h:1682
byte ServiceType
Definition: libFireBird.h:1667
tFlashTransponderTable TpInfo
Definition: libFireBird.h:1699
byte ReservationType
Definition: libFireBird.h:1668
byte unused8[8]
Definition: libFireBird.h:1686
word ServiceIndex
Definition: libFireBird.h:1685
dword rs_unknown3
Definition: libFireBird.h:1696
char FileName[131]
Definition: libFireBird.h:1673
byte unused10[8]
Definition: libFireBird.h:1689
dword rs_timestamp2
Definition: libFireBird.h:1695
dword rs_unknown1
Definition: libFireBird.h:1693