home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Image_Data1863613112005.psc / ImageDB / clsCRC.cls next >
Text File  |  2005-01-07  |  15KB  |  512 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsCRC"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. 'CRC Checksum Class
  15. '------------------------------------
  16. '
  17. 'A very fast solution to calculate the
  18. 'CRC Checksum (at the moment CRC16 and
  19. 'CRC32 values) with the help of some
  20. 'pre-compiled assembler code
  21. '
  22. '(c) 2000, Fredrik Qvarfort
  23. '
  24.  
  25. Option Explicit
  26.  
  27. Public Enum CRCAlgorithms
  28.   CRC16
  29.   CRC32
  30. End Enum
  31. Private m_Algorithm As Boolean
  32.  
  33. Private m_CRC16 As Long
  34. Private m_CRC16Asm() As Byte
  35. Private m_CRC16Init As Boolean
  36. Private m_CRC16Table(0 To 255) As Long
  37.  
  38. Private m_CRC32 As Long
  39. Private m_CRC32Asm() As Byte
  40. Private m_CRC32Init As Boolean
  41. Private m_CRC32Table(0 To 255) As Long
  42.  
  43. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  44.  
  45. Public Function AddBytes(ByteArray() As Byte) As Variant
  46.  
  47.   Dim ByteSize As Long
  48.   
  49.   'We need to add a simple error trapping
  50.   'here because if the bytearray is not
  51.   'dimensioned we want it to just skip
  52.   'the assembler code call below
  53.   On Local Error GoTo NoData
  54.   
  55.   'Precalculate the size of the byte array
  56.   ByteSize = UBound(ByteArray) - LBound(ByteArray) + 1
  57.   
  58.   'No error trapping needed, if something
  59.   'goes bad below something is definitely
  60.   'fishy with your computer
  61.   On Local Error GoTo 0
  62.   
  63.   'Run the pre-compiled assembler code
  64.   'for the current selected algorithm
  65.   Select Case m_Algorithm
  66.   Case CRC16
  67.     Call CallWindowProc(VarPtr(m_CRC16Asm(0)), VarPtr(m_CRC16), VarPtr(ByteArray(LBound(ByteArray))), VarPtr(m_CRC16Table(0)), ByteSize)
  68.   Case CRC32
  69.     Call CallWindowProc(VarPtr(m_CRC32Asm(0)), VarPtr(m_CRC32), VarPtr(ByteArray(LBound(ByteArray))), VarPtr(m_CRC32Table(0)), ByteSize)
  70.   End Select
  71.   
  72. NoData:
  73.   'Return the current CRC value
  74.   AddBytes = Value
  75.   
  76. End Function
  77. Public Function AddString(Text As String) As Variant
  78.  
  79.   'Convert the string into a byte array
  80.   'and send it to the function that can
  81.   'handle bytearrays
  82.   AddString = AddBytes(StrConv(Text, vbFromUnicode))
  83.   
  84. End Function
  85. Public Property Let Algorithm(New_Value As CRCAlgorithms)
  86.  
  87.   'Set the new algorithm
  88.   m_Algorithm = New_Value
  89.  
  90.   'Make sure we have initialized the
  91.   'current selected algorithm
  92.   Select Case m_Algorithm
  93.   Case CRC16
  94.     If (Not m_CRC16Init) Then Call InitializeCRC16
  95.   Case CRC32
  96.     If (Not m_CRC32Init) Then Call InitializeCRC32
  97.   End Select
  98.  
  99.   'Make sure we reset the data of the
  100.   'current selected algorithm
  101.   Call Clear
  102.   
  103. End Property
  104. Public Property Get Algorithm() As CRCAlgorithms
  105.  
  106.   Algorithm = m_Algorithm
  107.   
  108. End Property
  109.  
  110. Public Function CalculateBytes(ByteArray() As Byte) As Variant
  111.  
  112.   'Reset the current CRC calculation
  113.   Call Clear
  114.   
  115.   'Calculate the CRC from the bytearray
  116.   'and return the current CRC value
  117.   CalculateBytes = AddBytes(ByteArray)
  118.   
  119. End Function
  120.  
  121. Public Function CalculateFile(Filename As String) As Variant
  122.  
  123.   Dim Filenr As Integer
  124.   Dim ByteArray() As Byte
  125.   
  126.   'Make sure the file contains data
  127.   'to avoid errors later below
  128.   If (FileLen(Filename) = 0) Then Exit Function
  129.   
  130.   DoEvents
  131.   
  132.   'Open the file in binary mode, read
  133.   'the data into a bytearray and then
  134.   'close the file
  135.   ' On ErrorGoTo CalcErrHandler
  136.   Filenr = FreeFile
  137.   Open Filename For Binary As #Filenr
  138.   ReDim ByteArray(0 To LOF(Filenr) - 1)
  139.   Get #Filenr, , ByteArray()
  140.   Close #Filenr
  141.   
  142.   'Now send the bytearray to the function
  143.   'that can calculate a CRC from it
  144.   CalculateFile = CalculateBytes(ByteArray)
  145.   Exit Function
  146.   
  147. CalcErrHandler:
  148.   CalculateFile = "00000000"
  149. End Function
  150. Public Function CalculateString(Text As String)
  151.  
  152.   'Convert the string into a bytearray
  153.   'and send it to the function that
  154.   'calculates the CRC from a bytearray
  155.   CalculateString = CalculateBytes(StrConv(Text, vbFromUnicode))
  156.   
  157. End Function
  158. Public Property Get Value() As Variant
  159.  
  160.   Select Case m_Algorithm
  161.   Case CRC16
  162.     Value = (m_CRC16 And 65535)
  163.   Case CRC32
  164.     Value = (Not m_CRC32)
  165.   End Select
  166.   
  167. End Property
  168.  
  169. Public Property Let Value(New_Value As Variant)
  170.  
  171.   Select Case m_Algorithm
  172.   Case CRC16
  173.     m_CRC16 = New_Value
  174.   Case CRC32
  175.     m_CRC32 = New_Value
  176.   End Select
  177.   
  178. End Property
  179.  
  180. Private Sub InitializeCRC16()
  181.  
  182.   Dim i As Long
  183.   Dim j As Long
  184.   Dim k As Long
  185.   Dim CRC As Long
  186.   Dim sASM As String
  187.   
  188.   'Create the fixed lookup-table, this
  189.   'is calculated because it won't take
  190.   'long and is only done once
  191.   For i = 0 To 255
  192.     k = i * 256
  193.     CRC = 0
  194.     For j = 0 To 7
  195.       If (((CRC Xor k) And 32768) = 32768) Then
  196.         CRC = (CRC * 2) Xor &H1021
  197.       Else
  198.         CRC = (CRC * 2)
  199.       End If
  200.       k = k * 2
  201.     Next
  202.     m_CRC16Table(i) = CRC '(CRC And 65535)
  203.   Next
  204.   
  205.   'Create a bytearray to hold the
  206.   'precompiled assembler code
  207.   sASM = "5589E55756505351528B45088B008B750C8B7D108B4D1431DB8A1E30E3668B149F30C66689D0464975EF25FFFF00008B4D0889015A595B585E5F89EC5DC21000"
  208.   ReDim m_CRC16Asm(0 To Len(sASM) \ 2 - 1)
  209.   For i = 1 To Len(sASM) Step 2
  210.     m_CRC16Asm(i \ 2) = Val("&H" & Mid$(sASM, i, 2))
  211.   Next
  212.   
  213.   'Mark the CRC16 algorithm as initialized
  214.   m_CRC16Init = True
  215.   
  216. End Sub
  217. Public Sub Clear()
  218.  
  219.   'Here can be sloppy and reset both
  220.   'crc variables (this procedure will
  221.   'be more advanced when adding more
  222.   'checksums algorithms..)
  223.   m_CRC16 = 0
  224.   m_CRC32 = &HFFFFFFFF
  225.   
  226. End Sub
  227.  
  228. Private Sub InitializeCRC32()
  229.  
  230.   Dim i As Long
  231.   Dim sASM As String
  232.   
  233.   m_CRC32Table(0) = &H0
  234.   m_CRC32Table(1) = &H77073096
  235.   m_CRC32Table(2) = &HEE0E612C
  236.   m_CRC32Table(3) = &H990951BA
  237.   m_CRC32Table(4) = &H76DC419
  238.   m_CRC32Table(5) = &H706AF48F
  239.   m_CRC32Table(6) = &HE963A535
  240.   m_CRC32Table(7) = &H9E6495A3
  241.   m_CRC32Table(8) = &HEDB8832
  242.   m_CRC32Table(9) = &H79DCB8A4
  243.   m_CRC32Table(10) = &HE0D5E91E
  244.   m_CRC32Table(11) = &H97D2D988
  245.   m_CRC32Table(12) = &H9B64C2B
  246.   m_CRC32Table(13) = &H7EB17CBD
  247.   m_CRC32Table(14) = &HE7B82D07
  248.   m_CRC32Table(15) = &H90BF1D91
  249.   m_CRC32Table(16) = &H1DB71064
  250.   m_CRC32Table(17) = &H6AB020F2
  251.   m_CRC32Table(18) = &HF3B97148
  252.   m_CRC32Table(19) = &H84BE41DE
  253.   m_CRC32Table(20) = &H1ADAD47D
  254.   m_CRC32Table(21) = &H6DDDE4EB
  255.   m_CRC32Table(22) = &HF4D4B551
  256.   m_CRC32Table(23) = &H83D385C7
  257.   m_CRC32Table(24) = &H136C9856
  258.   m_CRC32Table(25) = &H646BA8C0
  259.   m_CRC32Table(26) = &HFD62F97A
  260.   m_CRC32Table(27) = &H8A65C9EC
  261.   m_CRC32Table(28) = &H14015C4F
  262.   m_CRC32Table(29) = &H63066CD9
  263.   m_CRC32Table(30) = &HFA0F3D63
  264.   m_CRC32Table(31) = &H8D080DF5
  265.   m_CRC32Table(32) = &H3B6E20C8
  266.   m_CRC32Table(33) = &H4C69105E
  267.   m_CRC32Table(34) = &HD56041E4
  268.   m_CRC32Table(35) = &HA2677172
  269.   m_CRC32Table(36) = &H3C03E4D1
  270.   m_CRC32Table(37) = &H4B04D447
  271.   m_CRC32Table(38) = &HD20D85FD
  272.   m_CRC32Table(39) = &HA50AB56B
  273.   m_CRC32Table(40) = &H35B5A8FA
  274.   m_CRC32Table(41) = &H42B2986C
  275.   m_CRC32Table(42) = &HDBBBC9D6
  276.   m_CRC32Table(43) = &HACBCF940
  277.   m_CRC32Table(44) = &H32D86CE3
  278.   m_CRC32Table(45) = &H45DF5C75
  279.   m_CRC32Table(46) = &HDCD60DCF
  280.   m_CRC32Table(47) = &HABD13D59
  281.   m_CRC32Table(48) = &H26D930AC
  282.   m_CRC32Table(49) = &H51DE003A
  283.   m_CRC32Table(50) = &HC8D75180
  284.   m_CRC32Table(51) = &HBFD06116
  285.   m_CRC32Table(52) = &H21B4F4B5
  286.   m_CRC32Table(53) = &H56B3C423
  287.   m_CRC32Table(54) = &HCFBA9599
  288.   m_CRC32Table(55) = &HB8BDA50F
  289.   m_CRC32Table(56) = &H2802B89E
  290.   m_CRC32Table(57) = &H5F058808
  291.   m_CRC32Table(58) = &HC60CD9B2
  292.   m_CRC32Table(59) = &HB10BE924
  293.   m_CRC32Table(60) = &H2F6F7C87
  294.   m_CRC32Table(61) = &H58684C11
  295.   m_CRC32Table(62) = &HC1611DAB
  296.   m_CRC32Table(63) = &HB6662D3D
  297.   m_CRC32Table(64) = &H76DC4190
  298.   m_CRC32Table(65) = &H1DB7106
  299.   m_CRC32Table(66) = &H98D220BC
  300.   m_CRC32Table(67) = &HEFD5102A
  301.   m_CRC32Table(68) = &H71B18589
  302.   m_CRC32Table(69) = &H6B6B51F
  303.   m_CRC32Table(70) = &H9FBFE4A5
  304.   m_CRC32Table(71) = &HE8B8D433
  305.   m_CRC32Table(72) = &H7807C9A2
  306.   m_CRC32Table(73) = &HF00F934
  307.   m_CRC32Table(74) = &H9609A88E
  308.   m_CRC32Table(75) = &HE10E9818
  309.   m_CRC32Table(76) = &H7F6A0DBB
  310.   m_CRC32Table(77) = &H86D3D2D
  311.   m_CRC32Table(78) = &H91646C97
  312.   m_CRC32Table(79) = &HE6635C01
  313.   m_CRC32Table(80) = &H6B6B51F4
  314.   m_CRC32Table(81) = &H1C6C6162
  315.   m_CRC32Table(82) = &H856530D8
  316.   m_CRC32Table(83) = &HF262004E
  317.   m_CRC32Table(84) = &H6C0695ED
  318.   m_CRC32Table(85) = &H1B01A57B
  319.   m_CRC32Table(86) = &H8208F4C1
  320.   m_CRC32Table(87) = &HF50FC457
  321.   m_CRC32Table(88) = &H65B0D9C6
  322.   m_CRC32Table(89) = &H12B7E950
  323.   m_CRC32Table(90) = &H8BBEB8EA
  324.   m_CRC32Table(91) = &HFCB9887C
  325.   m_CRC32Table(92) = &H62DD1DDF
  326.   m_CRC32Table(93) = &H15DA2D49
  327.   m_CRC32Table(94) = &H8CD37CF3
  328.   m_CRC32Table(95) = &HFBD44C65
  329.   m_CRC32Table(96) = &H4DB26158
  330.   m_CRC32Table(97) = &H3AB551CE
  331.   m_CRC32Table(98) = &HA3BC0074
  332.   m_CRC32Table(99) = &HD4BB30E2
  333.   m_CRC32Table(100) = &H4ADFA541
  334.   m_CRC32Table(101) = &H3DD895D7
  335.   m_CRC32Table(102) = &HA4D1C46D
  336.   m_CRC32Table(103) = &HD3D6F4FB
  337.   m_CRC32Table(104) = &H4369E96A
  338.   m_CRC32Table(105) = &H346ED9FC
  339.   m_CRC32Table(106) = &HAD678846
  340.   m_CRC32Table(107) = &HDA60B8D0
  341.   m_CRC32Table(108) = &H44042D73
  342.   m_CRC32Table(109) = &H33031DE5
  343.   m_CRC32Table(110) = &HAA0A4C5F
  344.   m_CRC32Table(111) = &HDD0D7CC9
  345.   m_CRC32Table(112) = &H5005713C
  346.   m_CRC32Table(113) = &H270241AA
  347.   m_CRC32Table(114) = &HBE0B1010
  348.   m_CRC32Table(115) = &HC90C2086
  349.   m_CRC32Table(116) = &H5768B525
  350.   m_CRC32Table(117) = &H206F85B3
  351.   m_CRC32Table(118) = &HB966D409
  352.   m_CRC32Table(119) = &HCE61E49F
  353.   m_CRC32Table(120) = &H5EDEF90E
  354.   m_CRC32Table(121) = &H29D9C998
  355.   m_CRC32Table(122) = &HB0D09822
  356.   m_CRC32Table(123) = &HC7D7A8B4
  357.   m_CRC32Table(124) = &H59B33D17
  358.   m_CRC32Table(125) = &H2EB40D81
  359.   m_CRC32Table(126) = &HB7BD5C3B
  360.   m_CRC32Table(127) = &HC0BA6CAD
  361.   m_CRC32Table(128) = &HEDB88320
  362.   m_CRC32Table(129) = &H9ABFB3B6
  363.   m_CRC32Table(130) = &H3B6E20C
  364.   m_CRC32Table(131) = &H74B1D29A
  365.   m_CRC32Table(132) = &HEAD54739
  366.   m_CRC32Table(133) = &H9DD277AF
  367.   m_CRC32Table(134) = &H4DB2615
  368.   m_CRC32Table(135) = &H73DC1683
  369.   m_CRC32Table(136) = &HE3630B12
  370.   m_CRC32Table(137) = &H94643B84
  371.   m_CRC32Table(138) = &HD6D6A3E
  372.   m_CRC32Table(139) = &H7A6A5AA8
  373.   m_CRC32Table(140) = &HE40ECF0B
  374.   m_CRC32Table(141) = &H9309FF9D
  375.   m_CRC32Table(142) = &HA00AE27
  376.   m_CRC32Table(143) = &H7D079EB1
  377.   m_CRC32Table(144) = &HF00F9344
  378.   m_CRC32Table(145) = &H8708A3D2
  379.   m_CRC32Table(146) = &H1E01F268
  380.   m_CRC32Table(147) = &H6906C2FE
  381.   m_CRC32Table(148) = &HF762575D
  382.   m_CRC32Table(149) = &H806567CB
  383.   m_CRC32Table(150) = &H196C3671
  384.   m_CRC32Table(151) = &H6E6B06E7
  385.   m_CRC32Table(152) = &HFED41B76
  386.   m_CRC32Table(153) = &H89D32BE0
  387.   m_CRC32Table(154) = &H10DA7A5A
  388.   m_CRC32Table(155) = &H67DD4ACC
  389.   m_CRC32Table(156) = &HF9B9DF6F
  390.   m_CRC32Table(157) = &H8EBEEFF9
  391.   m_CRC32Table(158) = &H17B7BE43
  392.   m_CRC32Table(159) = &H60B08ED5
  393.   m_CRC32Table(160) = &HD6D6A3E8
  394.   m_CRC32Table(161) = &HA1D1937E
  395.   m_CRC32Table(162) = &H38D8C2C4
  396.   m_CRC32Table(163) = &H4FDFF252
  397.   m_CRC32Table(164) = &HD1BB67F1
  398.   m_CRC32Table(165) = &HA6BC5767
  399.   m_CRC32Table(166) = &H3FB506DD
  400.   m_CRC32Table(167) = &H48B2364B
  401.   m_CRC32Table(168) = &HD80D2BDA
  402.   m_CRC32Table(169) = &HAF0A1B4C
  403.   m_CRC32Table(170) = &H36034AF6
  404.   m_CRC32Table(171) = &H41047A60
  405.   m_CRC32Table(172) = &HDF60EFC3
  406.   m_CRC32Table(173) = &HA867DF55
  407.   m_CRC32Table(174) = &H316E8EEF
  408.   m_CRC32Table(175) = &H4669BE79
  409.   m_CRC32Table(176) = &HCB61B38C
  410.   m_CRC32Table(177) = &HBC66831A
  411.   m_CRC32Table(178) = &H256FD2A0
  412.   m_CRC32Table(179) = &H5268E236
  413.   m_CRC32Table(180) = &HCC0C7795
  414.   m_CRC32Table(181) = &HBB0B4703
  415.   m_CRC32Table(182) = &H220216B9
  416.   m_CRC32Table(183) = &H5505262F
  417.   m_CRC32Table(184) = &HC5BA3BBE
  418.   m_CRC32Table(185) = &HB2BD0B28
  419.   m_CRC32Table(186) = &H2BB45A92
  420.   m_CRC32Table(187) = &H5CB36A04
  421.   m_CRC32Table(188) = &HC2D7FFA7
  422.   m_CRC32Table(189) = &HB5D0CF31
  423.   m_CRC32Table(190) = &H2CD99E8B
  424.   m_CRC32Table(191) = &H5BDEAE1D
  425.   m_CRC32Table(192) = &H9B64C2B0
  426.   m_CRC32Table(193) = &HEC63F226
  427.   m_CRC32Table(194) = &H756AA39C
  428.   m_CRC32Table(195) = &H26D930A
  429.   m_CRC32Table(196) = &H9C0906A9
  430.   m_CRC32Table(197) = &HEB0E363F
  431.   m_CRC32Table(198) = &H72076785
  432.   m_CRC32Table(199) = &H5005713
  433.   m_CRC32Table(200) = &H95BF4A82
  434.   m_CRC32Table(201) = &HE2B87A14
  435.   m_CRC32Table(202) = &H7BB12BAE
  436.   m_CRC32Table(203) = &HCB61B38
  437.   m_CRC32Table(204) = &H92D28E9B
  438.   m_CRC32Table(205) = &HE5D5BE0D
  439.   m_CRC32Table(206) = &H7CDCEFB7
  440.   m_CRC32Table(207) = &HBDBDF21
  441.   m_CRC32Table(208) = &H86D3D2D4
  442.   m_CRC32Table(209) = &HF1D4E242
  443.   m_CRC32Table(210) = &H68DDB3F8
  444.   m_CRC32Table(211) = &H1FDA836E
  445.   m_CRC32Table(212) = &H81BE16CD
  446.   m_CRC32Table(213) = &HF6B9265B
  447.   m_CRC32Table(214) = &H6FB077E1
  448.   m_CRC32Table(215) = &H18B74777
  449.   m_CRC32Table(216) = &H88085AE6
  450.   m_CRC32Table(217) = &HFF0F6A70
  451.   m_CRC32Table(218) = &H66063BCA
  452.   m_CRC32Table(219) = &H11010B5C
  453.   m_CRC32Table(220) = &H8F659EFF
  454.   m_CRC32Table(221) = &HF862AE69
  455.   m_CRC32Table(222) = &H616BFFD3
  456.   m_CRC32Table(223) = &H166CCF45
  457.   m_CRC32Table(224) = &HA00AE278
  458.   m_CRC32Table(225) = &HD70DD2EE
  459.   m_CRC32Table(226) = &H4E048354
  460.   m_CRC32Table(227) = &H3903B3C2
  461.   m_CRC32Table(228) = &HA7672661
  462.   m_CRC32Table(229) = &HD06016F7
  463.   m_CRC32Table(230) = &H4969474D
  464.   m_CRC32Table(231) = &H3E6E77DB
  465.   m_CRC32Table(232) = &HAED16A4A
  466.   m_CRC32Table(233) = &HD9D65ADC
  467.   m_CRC32Table(234) = &H40DF0B66
  468.   m_CRC32Table(235) = &H37D83BF0
  469.   m_CRC32Table(236) = &HA9BCAE53
  470.   m_CRC32Table(237) = &HDEBB9EC5
  471.   m_CRC32Table(238) = &H47B2CF7F
  472.   m_CRC32Table(239) = &H30B5FFE9
  473.   m_CRC32Table(240) = &HBDBDF21C
  474.   m_CRC32Table(241) = &HCABAC28A
  475.   m_CRC32Table(242) = &H53B39330
  476.   m_CRC32Table(243) = &H24B4A3A6
  477.   m_CRC32Table(244) = &HBAD03605
  478.   m_CRC32Table(245) = &HCDD70693
  479.   m_CRC32Table(246) = &H54DE5729
  480.   m_CRC32Table(247) = &H23D967BF
  481.   m_CRC32Table(248) = &HB3667A2E
  482.   m_CRC32Table(249) = &HC4614AB8
  483.   m_CRC32Table(250) = &H5D681B02
  484.   m_CRC32Table(251) = &H2A6F2B94
  485.   m_CRC32Table(252) = &HB40BBE37
  486.   m_CRC32Table(253) = &HC30C8EA1
  487.   m_CRC32Table(254) = &H5A05DF1B
  488.   m_CRC32Table(255) = &H2D02EF8D
  489.  
  490.   'Create a bytearray to hold the
  491.   'precompiled assembler code
  492.   sASM = "5589E557565053518B45088B008B750C8B7D108B4D1431DB8A1E30C3C1E80833049F464975F28B4D088901595B585E5F89EC5DC21000"
  493.   ReDim m_CRC32Asm(0 To Len(sASM) \ 2 - 1)
  494.   For i = 1 To Len(sASM) Step 2
  495.     m_CRC32Asm(i \ 2) = Val("&H" & Mid$(sASM, i, 2))
  496.   Next
  497.   
  498.   'Mark the CRC32 algorithm as initialized
  499.   m_CRC32Init = True
  500.  
  501. End Sub
  502. Private Sub Class_Initialize()
  503.  
  504.   'The default algorithm is CRC32
  505.   Algorithm = CRC32
  506.   
  507. End Sub
  508.  
  509.  
  510.  
  511.  
  512.