3 // ß íå õî÷ó òðàõàòüñÿ ñ êëàññàìè è ñîçäàíèåì ïî äâà îáúåêòà íà êàæäûé áóôåð,
4 // êàê â BinEditor/WADEDITOR, ïîýòîìó áóäåò òàê. Ïëþñ ôèêñèðîâàííûé ðàçìåð
16 Data
: array [0..BUF_SIZE
] of Byte; // îäèí áàéò ñâåðõó íà âñÿêèé ñëó÷àé
26 procedure e_Buffer_Clear(B
: pTBuffer
);
29 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
30 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
33 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
35 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
36 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
37 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
39 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
40 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
41 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
43 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
45 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
48 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
50 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
51 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
52 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
54 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
55 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
56 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
58 function e_Buffer_Read_String(B
: pTBuffer
): string;
60 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
63 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
65 function e_Raw_Read_Char(P
: Pointer): Char;
67 function e_Raw_Read_Byte(P
: Pointer): Byte;
68 function e_Raw_Read_Word(P
: Pointer): Word;
69 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
71 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
72 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
73 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
75 function e_Raw_Read_String(P
: Pointer): string;
77 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
79 procedure e_Raw_Seek(I
: Cardinal);
83 uses Windows
, SysUtils
;
85 procedure e_Buffer_Clear(B
: pTBuffer
);
93 procedure e_Buffer_Write_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
95 if (B
^.WritePos
+ N
>= BUF_SIZE
) then Exit
;
96 if (B
^.WritePos
+ N
> B
^.Len
) then
97 B
^.Len
:= B
^.WritePos
+ N
+ 1;
99 MoveMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
102 B
^.WritePos
:= B
^.WritePos
+ N
;
104 procedure e_Buffer_Read_Generic(B
: pTBuffer
; var V
; N
: Cardinal);
106 if (B
^.ReadPos
+ N
>= BUF_SIZE
) then Exit
;
108 MoveMemory(@V
, Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), N
);
110 B
^.ReadPos
:= B
^.ReadPos
+ N
;
114 procedure e_Buffer_Write(B
: pTBuffer
; V
: Char); overload
;
116 e_Buffer_Write_Generic(B
, V
, 1);
119 procedure e_Buffer_Write(B
: pTBuffer
; V
: Byte); overload
;
121 e_Buffer_Write_Generic(B
, V
, 1);
123 procedure e_Buffer_Write(B
: pTBuffer
; V
: Word); overload
;
125 e_Buffer_Write_Generic(B
, V
, 2);
127 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongWord); overload
;
129 e_Buffer_Write_Generic(B
, V
, 4);
132 procedure e_Buffer_Write(B
: pTBuffer
; V
: ShortInt); overload
;
134 e_Buffer_Write_Generic(B
, V
, 1);
136 procedure e_Buffer_Write(B
: pTBuffer
; V
: SmallInt); overload
;
138 e_Buffer_Write_Generic(B
, V
, 2);
140 procedure e_Buffer_Write(B
: pTBuffer
; V
: LongInt); overload
;
142 e_Buffer_Write_Generic(B
, V
, 4);
145 procedure e_Buffer_Write(B
: pTBuffer
; V
: string); overload
;
151 e_Buffer_Write_Generic(B
, Len
, 1);
153 if (Len
= 0) then Exit
;
155 P
:= B
^.WritePos
+ Len
;
156 if (P
>= BUF_SIZE
) then
158 Len
:= BUF_SIZE
- B
^.WritePos
;
162 if (P
> B
^.Len
) then B
^.Len
:= P
;
164 CopyMemory(Pointer(Cardinal(Addr(B
^.Data
)) + B
^.WritePos
),
170 procedure e_Buffer_Write(B
: pTBuffer
; V
: TMD5Digest
); overload
;
175 e_Buffer_Write(B
, V
.v
[I
]);
179 function e_Buffer_Read_Char(B
: pTBuffer
): Char;
181 e_Buffer_Read_Generic(B
, Result
, 1);
184 function e_Buffer_Read_Byte(B
: pTBuffer
): Byte;
186 e_Buffer_Read_Generic(B
, Result
, 1);
188 function e_Buffer_Read_Word(B
: pTBuffer
): Word;
190 e_Buffer_Read_Generic(B
, Result
, 2);
192 function e_Buffer_Read_LongWord(B
: pTBuffer
): LongWord;
194 e_Buffer_Read_Generic(B
, Result
, 4);
197 function e_Buffer_Read_ShortInt(B
: pTBuffer
): ShortInt;
199 e_Buffer_Read_Generic(B
, Result
, 1);
201 function e_Buffer_Read_SmallInt(B
: pTBuffer
): SmallInt;
203 e_Buffer_Read_Generic(B
, Result
, 2);
205 function e_Buffer_Read_LongInt(B
: pTBuffer
): LongInt;
207 e_Buffer_Read_Generic(B
, Result
, 4);
210 function e_Buffer_Read_String(B
: pTBuffer
): string;
214 Len
:= e_Buffer_Read_Byte(B
);
216 if Len
= 0 then Exit
;
218 if B
^.ReadPos
+ Len
> B
^.Len
then
219 Len
:= B
^.Len
- B
^.ReadPos
;
221 SetLength(Result
, Len
);
222 MoveMemory(@Result
[1], Pointer(Cardinal(Addr(B
^.Data
)) + B
^.ReadPos
), Len
);
224 B
^.ReadPos
:= B
^.ReadPos
+ Len
;
227 function e_Buffer_Read_MD5(B
: pTBuffer
): TMD5Digest
;
232 Result
.v
[I
] := e_Buffer_Read_Byte(B
);
235 procedure e_Raw_Read_Generic(P
: Pointer; var V
; N
: Cardinal);
237 MoveMemory(@V
, Pointer(Cardinal(P
) + RawPos
), N
);
239 RawPos
:= RawPos
+ N
;
242 function e_Raw_Read_Char(P
: Pointer): Char;
244 e_Raw_Read_Generic(P
, Result
, 1);
247 function e_Raw_Read_Byte(P
: Pointer): Byte;
249 e_Raw_Read_Generic(P
, Result
, 1);
251 function e_Raw_Read_Word(P
: Pointer): Word;
253 e_Raw_Read_Generic(P
, Result
, 2);
255 function e_Raw_Read_LongWord(P
: Pointer): LongWord;
257 e_Raw_Read_Generic(P
, Result
, 4);
260 function e_Raw_Read_ShortInt(P
: Pointer): ShortInt;
262 e_Raw_Read_Generic(P
, Result
, 1);
264 function e_Raw_Read_SmallInt(P
: Pointer): SmallInt;
266 e_Raw_Read_Generic(P
, Result
, 2);
268 function e_Raw_Read_LongInt(P
: Pointer): LongInt;
270 e_Raw_Read_Generic(P
, Result
, 4);
273 function e_Raw_Read_String(P
: Pointer): string;
277 Len
:= e_Raw_Read_Byte(P
);
279 if Len
= 0 then Exit
;
281 SetLength(Result
, Len
);
282 MoveMemory(@Result
[1], Pointer(Cardinal(P
) + RawPos
), Len
);
284 RawPos
:= RawPos
+ Len
;
287 function e_Raw_Read_MD5(P
: Pointer): TMD5Digest
;
292 Result
.v
[I
] := e_Raw_Read_Byte(P
);
295 procedure e_Raw_Seek(I
: Cardinal);