That almost makes me spew as much as.

Code: 
Public Function Adler32$(data As StringReader, Optional InitL& = 1, Optional InitH& = 0)
   With data
            Dim L&, h&
            h = InitH: L = InitL
               
               Dim StrCharPos&, tmpBuff$
               tmpBuff = StrConv(.mvardata, vbFromUnicode, LocaleID_ENG)
                  'The largest prime less than 2^16
                  L = (AscB(MidB$(tmpBuff, StrCharPos, 1)) + L) ' Mod 65521 '&HFFF1
                  h = (h + L) ' Mod 65521 '&HFFF1

                  If (0 = (StrCharPos Mod 5552)) Or _
                           (StrCharPos = Len(.mvardata)) Then
                     L = L Mod 65521  '&HFFF1
                     h = h Mod 65521  '&HFFF1
                     myDoEvents
                  End If
                  
               Next

      Adler32 = H16(h) & H16(L)
   End With
End Function
which by the way is just
Code: 
static public uint adler32(byte[] data, int len){
 	        ulong a = 17;
 	        ulong b = 0;
 	        ulong MOD_ADLER = 65521;
 	        for(int i = 0; i < len; ++i){
 		        a = (a + data[i]) % MOD_ADLER;
 		        b = (b + a) % MOD_ADLER;
 	        }
 	        return (uint)((b << 16) | a);
         }