12 Data
: array [0..BUF_SIZE
] of Byte; // îäèí áàéò ñâåðõó íà âñÿêèé ñëó÷àé
22 procedure e_Buffer_Clear(B
: pTBuffer
);
25 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
26 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
29 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
31 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
32 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
33 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
35 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
36 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
37 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
39 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
41 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
44 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
46 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
47 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
48 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
50 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
51 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
52 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
53 function e_Buffer_Read_Int64(B
: pTBuffer
): Int64;
55 function e_Buffer_Read_String(B
: pTBuffer
): string;
57 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
60 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
62 function e_Raw_Read_Char(P
: Pointer): Char;
64 function e_Raw_Read_Byte(P
: Pointer): Byte;
65 function e_Raw_Read_Word(P
: Pointer): Word;
66 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
68 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
69 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
70 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
72 function e_Raw_Read_String(P
: Pointer): string;
74 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
76 procedure e_Raw_Seek(I
: Cardinal);
80 uses SysUtils
, BinEditor
;
82 procedure e_Buffer_Clear(B
: pTBuffer
);
90 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
92 if (B
^.WritePos
+ N
>= BUF_SIZE
) then Exit
;
93 if (B
^.WritePos
+ N
> B
^.Len
) then
94 B
^.Len
:= B
^.WritePos
+ N
+ 1;
96 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
99 B
^.WritePos
:= B
^.WritePos
+ N
;
101 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
103 if (B
^.ReadPos
+ N
>= BUF_SIZE
) then Exit
;
105 CopyMemory(@V
, Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), N
);
107 B
^.ReadPos
:= B
^.ReadPos
+ N
;
111 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
113 e_Buffer_Write_Generic(B
, V
, 1);
116 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
118 e_Buffer_Write_Generic(B
, V
, 1);
120 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
122 e_Buffer_Write_Generic(B
, V
, 2);
124 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
126 e_Buffer_Write_Generic(B
, V
, 4);
129 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
131 e_Buffer_Write_Generic(B
, V
, 1);
133 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
135 e_Buffer_Write_Generic(B
, V
, 2);
137 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
139 e_Buffer_Write_Generic(B
, V
, 4);
142 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
148 e_Buffer_Write_Generic(B
, Len
, 1);
150 if (Len
= 0) then Exit
;
152 P
:= B
^.WritePos
+ Len
;
153 if (P
>= BUF_SIZE
) then
155 Len
:= BUF_SIZE
- B
^.WritePos
;
159 if (P
> B
^.Len
) then B
^.Len
:= P
;
161 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
167 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
172 e_Buffer_Write(B
, V
[I
]);
176 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
178 e_Buffer_Read_Generic(B
, Result
, 1);
181 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
183 e_Buffer_Read_Generic(B
, Result
, 1);
185 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
187 e_Buffer_Read_Generic(B
, Result
, 2);
189 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
191 e_Buffer_Read_Generic(B
, Result
, 4);
194 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
196 e_Buffer_Read_Generic(B
, Result
, 1);
198 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
200 e_Buffer_Read_Generic(B
, Result
, 2);
202 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
204 e_Buffer_Read_Generic(B
, Result
, 4);
206 function e_Buffer_Read_Int64(B
: pTBuffer
): Int64;
208 e_Buffer_Read_Generic(B
, Result
, 8);
211 function e_Buffer_Read_String(B
: pTBuffer
): string;
215 Len
:= e_Buffer_Read_Byte(B
);
217 if Len
= 0 then Exit
;
219 if B
^.ReadPos
+ Len
> B
^.Len
then
220 Len
:= B
^.Len
- B
^.ReadPos
;
222 SetLength(Result
, Len
);
223 CopyMemory(@Result
[1], Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), Len
);
225 B
^.ReadPos
:= B
^.ReadPos
+ Len
;
228 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
233 Result
[I
] := e_Buffer_Read_Byte(B
);
236 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
238 CopyMemory(@V
, Pointer(Cardinal(P
) + RawPos
), N
);
240 RawPos
:= RawPos
+ N
;
243 function e_Raw_Read_Char(P
: Pointer): Char;
245 e_Raw_Read_Generic(P
, Result
, 1);
248 function e_Raw_Read_Byte(P
: Pointer): Byte;
250 e_Raw_Read_Generic(P
, Result
, 1);
252 function e_Raw_Read_Word(P
: Pointer): Word;
254 e_Raw_Read_Generic(P
, Result
, 2);
256 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
258 e_Raw_Read_Generic(P
, Result
, 4);
261 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
263 e_Raw_Read_Generic(P
, Result
, 1);
265 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
267 e_Raw_Read_Generic(P
, Result
, 2);
269 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
271 e_Raw_Read_Generic(P
, Result
, 4);
274 function e_Raw_Read_String(P
: Pointer): string;
278 Len
:= e_Raw_Read_Byte(P
);
280 if Len
= 0 then Exit
;
282 SetLength(Result
, Len
);
283 CopyMemory(@Result
[1], Pointer(Cardinal(P
) + RawPos
), Len
);
285 RawPos
:= RawPos
+ Len
;
288 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
293 Result
[I
] := e_Raw_Read_Byte(P
);
296 procedure e_Raw_Seek(I
: Cardinal);