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;
54 function e_Buffer_Read_String(B
: pTBuffer
): string;
56 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
59 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
61 function e_Raw_Read_Char(P
: Pointer): Char;
63 function e_Raw_Read_Byte(P
: Pointer): Byte;
64 function e_Raw_Read_Word(P
: Pointer): Word;
65 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
67 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
68 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
69 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
71 function e_Raw_Read_String(P
: Pointer): string;
73 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
75 procedure e_Raw_Seek(I
: Cardinal);
79 uses SysUtils
, BinEditor
;
81 procedure e_Buffer_Clear(B
: pTBuffer
);
89 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
91 if (B
^.WritePos
+ N
>= BUF_SIZE
) then Exit
;
92 if (B
^.WritePos
+ N
> B
^.Len
) then
93 B
^.Len
:= B
^.WritePos
+ N
+ 1;
95 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
98 B
^.WritePos
:= B
^.WritePos
+ N
;
100 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
102 if (B
^.ReadPos
+ N
>= BUF_SIZE
) then Exit
;
104 CopyMemory(@V
, Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), N
);
106 B
^.ReadPos
:= B
^.ReadPos
+ N
;
110 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
112 e_Buffer_Write_Generic(B
, V
, 1);
115 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
117 e_Buffer_Write_Generic(B
, V
, 1);
119 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
121 e_Buffer_Write_Generic(B
, V
, 2);
123 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
125 e_Buffer_Write_Generic(B
, V
, 4);
128 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
130 e_Buffer_Write_Generic(B
, V
, 1);
132 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
134 e_Buffer_Write_Generic(B
, V
, 2);
136 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
138 e_Buffer_Write_Generic(B
, V
, 4);
141 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
147 e_Buffer_Write_Generic(B
, Len
, 1);
149 if (Len
= 0) then Exit
;
151 P
:= B
^.WritePos
+ Len
;
152 if (P
>= BUF_SIZE
) then
154 Len
:= BUF_SIZE
- B
^.WritePos
;
158 if (P
> B
^.Len
) then B
^.Len
:= P
;
160 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
166 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
171 e_Buffer_Write(B
, V
[I
]);
175 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
177 e_Buffer_Read_Generic(B
, Result
, 1);
180 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
182 e_Buffer_Read_Generic(B
, Result
, 1);
184 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
186 e_Buffer_Read_Generic(B
, Result
, 2);
188 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
190 e_Buffer_Read_Generic(B
, Result
, 4);
193 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
195 e_Buffer_Read_Generic(B
, Result
, 1);
197 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
199 e_Buffer_Read_Generic(B
, Result
, 2);
201 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
203 e_Buffer_Read_Generic(B
, Result
, 4);
206 function e_Buffer_Read_String(B
: pTBuffer
): string;
210 Len
:= e_Buffer_Read_Byte(B
);
212 if Len
= 0 then Exit
;
214 if B
^.ReadPos
+ Len
> B
^.Len
then
215 Len
:= B
^.Len
- B
^.ReadPos
;
217 SetLength(Result
, Len
);
218 CopyMemory(@Result
[1], Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), Len
);
220 B
^.ReadPos
:= B
^.ReadPos
+ Len
;
223 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
228 Result
[I
] := e_Buffer_Read_Byte(B
);
231 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
233 CopyMemory(@V
, Pointer(Cardinal(P
) + RawPos
), N
);
235 RawPos
:= RawPos
+ N
;
238 function e_Raw_Read_Char(P
: Pointer): Char;
240 e_Raw_Read_Generic(P
, Result
, 1);
243 function e_Raw_Read_Byte(P
: Pointer): Byte;
245 e_Raw_Read_Generic(P
, Result
, 1);
247 function e_Raw_Read_Word(P
: Pointer): Word;
249 e_Raw_Read_Generic(P
, Result
, 2);
251 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
253 e_Raw_Read_Generic(P
, Result
, 4);
256 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
258 e_Raw_Read_Generic(P
, Result
, 1);
260 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
262 e_Raw_Read_Generic(P
, Result
, 2);
264 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
266 e_Raw_Read_Generic(P
, Result
, 4);
269 function e_Raw_Read_String(P
: Pointer): string;
273 Len
:= e_Raw_Read_Byte(P
);
275 if Len
= 0 then Exit
;
277 SetLength(Result
, Len
);
278 CopyMemory(@Result
[1], Pointer(Cardinal(P
) + RawPos
), Len
);
280 RawPos
:= RawPos
+ Len
;
283 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
288 Result
[I
] := e_Raw_Read_Byte(P
);
291 procedure e_Raw_Seek(I
: Cardinal);