13 Data
: array [0..BUF_SIZE
] of Byte; // îäèí áàéò ñâåðõó íà âñÿêèé ñëó÷àé
23 procedure e_Buffer_Clear(B
: pTBuffer
);
26 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
27 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
30 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
32 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
33 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
34 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
36 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
37 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
38 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
40 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
42 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
45 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
47 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
48 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
49 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
51 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
52 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
53 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
54 function e_Buffer_Read_Int64(B
: pTBuffer
): Int64;
56 function e_Buffer_Read_String(B
: pTBuffer
): string;
58 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
61 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
63 function e_Raw_Read_Char(P
: Pointer): Char;
65 function e_Raw_Read_Byte(P
: Pointer): Byte;
66 function e_Raw_Read_Word(P
: Pointer): Word;
67 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
69 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
70 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
71 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
73 function e_Raw_Read_String(P
: Pointer): string;
75 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
77 procedure e_Raw_Seek(I
: Cardinal);
81 uses SysUtils
, BinEditor
;
83 procedure e_Buffer_Clear(B
: pTBuffer
);
91 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
93 if (B
^.WritePos
+ N
>= BUF_SIZE
) then Exit
;
94 if (B
^.WritePos
+ N
> B
^.Len
) then
95 B
^.Len
:= B
^.WritePos
+ N
+ 1;
97 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
100 B
^.WritePos
:= B
^.WritePos
+ N
;
102 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
104 if (B
^.ReadPos
+ N
>= BUF_SIZE
) then Exit
;
106 CopyMemory(@V
, Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), N
);
108 B
^.ReadPos
:= B
^.ReadPos
+ N
;
112 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
114 e_Buffer_Write_Generic(B
, V
, 1);
117 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
119 e_Buffer_Write_Generic(B
, V
, 1);
121 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
123 e_Buffer_Write_Generic(B
, V
, 2);
125 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
127 e_Buffer_Write_Generic(B
, V
, 4);
130 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
132 e_Buffer_Write_Generic(B
, V
, 1);
134 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
136 e_Buffer_Write_Generic(B
, V
, 2);
138 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
140 e_Buffer_Write_Generic(B
, V
, 4);
143 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
149 e_Buffer_Write_Generic(B
, Len
, 1);
151 if (Len
= 0) then Exit
;
153 P
:= B
^.WritePos
+ Len
;
154 if (P
>= BUF_SIZE
) then
156 Len
:= BUF_SIZE
- B
^.WritePos
;
160 if (P
> B
^.Len
) then B
^.Len
:= P
;
162 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
168 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
173 e_Buffer_Write(B
, V
[I
]);
177 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
179 e_Buffer_Read_Generic(B
, Result
, 1);
182 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
184 e_Buffer_Read_Generic(B
, Result
, 1);
186 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
188 e_Buffer_Read_Generic(B
, Result
, 2);
190 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
192 e_Buffer_Read_Generic(B
, Result
, 4);
195 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
197 e_Buffer_Read_Generic(B
, Result
, 1);
199 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
201 e_Buffer_Read_Generic(B
, Result
, 2);
203 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
205 e_Buffer_Read_Generic(B
, Result
, 4);
207 function e_Buffer_Read_Int64(B
: pTBuffer
): Int64;
209 e_Buffer_Read_Generic(B
, Result
, 8);
212 function e_Buffer_Read_String(B
: pTBuffer
): string;
216 Len
:= e_Buffer_Read_Byte(B
);
218 if Len
= 0 then Exit
;
220 if B
^.ReadPos
+ Len
> B
^.Len
then
221 Len
:= B
^.Len
- B
^.ReadPos
;
223 SetLength(Result
, Len
);
224 CopyMemory(@Result
[1], Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), Len
);
226 B
^.ReadPos
:= B
^.ReadPos
+ Len
;
229 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
234 Result
[I
] := e_Buffer_Read_Byte(B
);
237 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
239 CopyMemory(@V
, Pointer(Cardinal(P
) + RawPos
), N
);
241 RawPos
:= RawPos
+ N
;
244 function e_Raw_Read_Char(P
: Pointer): Char;
246 e_Raw_Read_Generic(P
, Result
, 1);
249 function e_Raw_Read_Byte(P
: Pointer): Byte;
251 e_Raw_Read_Generic(P
, Result
, 1);
253 function e_Raw_Read_Word(P
: Pointer): Word;
255 e_Raw_Read_Generic(P
, Result
, 2);
257 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
259 e_Raw_Read_Generic(P
, Result
, 4);
262 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
264 e_Raw_Read_Generic(P
, Result
, 1);
266 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
268 e_Raw_Read_Generic(P
, Result
, 2);
270 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
272 e_Raw_Read_Generic(P
, Result
, 4);
275 function e_Raw_Read_String(P
: Pointer): string;
279 Len
:= e_Raw_Read_Byte(P
);
281 if Len
= 0 then Exit
;
283 SetLength(Result
, Len
);
284 CopyMemory(@Result
[1], Pointer(Cardinal(P
) + RawPos
), Len
);
286 RawPos
:= RawPos
+ Len
;
289 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
294 Result
[I
] := e_Raw_Read_Byte(P
);
297 procedure e_Raw_Seek(I
: Cardinal);