equal
deleted
inserted
replaced
61 ----------------------------------------------------------------------------*) |
61 ----------------------------------------------------------------------------*) |
62 |
62 |
63 (* |
63 (* |
64 As per the license above, noting that this implementation of adler32 was stripped of everything we didn't need. |
64 As per the license above, noting that this implementation of adler32 was stripped of everything we didn't need. |
65 That means no btypes, file loading, and the assembly version disabled. |
65 That means no btypes, file loading, and the assembly version disabled. |
|
66 Also, the structure was removed to simplify C conversion |
66 *) |
67 *) |
67 |
68 |
68 procedure Adler32Update ( var adler :longint; Msg :pointer; Len :longint ); |
69 procedure Adler32Update ( var adler :longint; Msg :pointer; Len :longint ); |
69 |
70 |
70 implementation |
71 implementation |
126 procedure Adler32Update(var adler: longint; Msg: pointer; Len :longint); |
127 procedure Adler32Update(var adler: longint; Msg: pointer; Len :longint); |
127 {-update Adler32 with Msg data} |
128 {-update Adler32 with Msg data} |
128 const |
129 const |
129 BASE = 65521; {max. prime < 65536 } |
130 BASE = 65521; {max. prime < 65536 } |
130 NMAX = 3854; {max. n with 255n(n+1)/2 + (n+1)(BASE-1) < 2^31} |
131 NMAX = 3854; {max. n with 255n(n+1)/2 + (n+1)(BASE-1) < 2^31} |
131 type |
|
132 LH = packed record |
|
133 L, H: word; |
|
134 end; |
|
135 var |
132 var |
136 s1, s2: longint; |
133 s1, s2: longint; |
137 i, n: integer; |
134 i, n: integer; |
138 begin |
135 begin |
139 s1 := LH(adler).L; |
136 s1 := adler and $FFFF; |
140 s2 := LH(adler).H; |
137 s2 := adler shr 16; |
141 while Len>0 do |
138 while Len>0 do |
142 begin |
139 begin |
143 if Len<NMAX then |
140 if Len<NMAX then |
144 n := Len |
141 n := Len |
145 else |
142 else |
153 end; |
150 end; |
154 s1 := s1 mod BASE; |
151 s1 := s1 mod BASE; |
155 s2 := s2 mod BASE; |
152 s2 := s2 mod BASE; |
156 dec(len, n); |
153 dec(len, n); |
157 end; |
154 end; |
158 LH(adler).L := word(s1); |
155 adler:= (s2 shl 16) or s1; |
159 LH(adler).H := word(s2); |
|
160 end; |
156 end; |
161 |
157 |
162 end. |
158 end. |