📄 global.bas
字号:
Attribute VB_Name = "Global"
Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, source As Any, ByVal Length As Long)
Public RGBColor(6) As ColorConstants 'color codes for graphics
Public OriginalArray() As Byte 'array to store the original
Public OriginalSize As Long 'size of the original file
Public WorkArray() As Byte 'array to store the results
Public LoadFileName As String 'which file is loeded
Public JustLoaded As Boolean 'to see if the original file is just loaded
Public DictionarySize As Integer 'for use with LZW and LZSS compressors
Public LastCoder As Integer 'wich coder is used last
Public UsedCodecs() As Integer 'to store the codecs used
Public LastDeCoded As Boolean 'to see what has happen lately
Public AritmaticRescale As Boolean 'to set rescale on
Public CompDecomp As Integer 'result from compress or decompress screen
Public ParingType As Byte 'Byte used to determen the type of paring
'constants for the coder types
Public Const Coder_Differantiator = 1
Public Const Coder_FrequentieShifter = 2
Public Const Coder_BWT = 3
Public Const Coder_Fix128 = 4
Public Const Coder_Flatter64 = 5
Public Const Coder_MTF_No_Header = 6
Public Const Coder_MTF_With_Header = 7
Public Const Coder_SortSwap = 8
Public Const Coder_Used_To_Front = 9
Public Const Coder_ValueDownShift = 10
Public Const Coder_ValueUpShift = 11
Public Const Coder_ValueTwister = 12
Public Const Coder_Fix128B = 13
Public Const Coder_Seperator = 14
Public Const Coder_Flatter16 = 15
Public Const Coder_Base64 = 16
Public Const Coder_Numerator = 17
Public Const Coder_Numerator2 = 18
Public Const Coder_AddDifferantiator = 19
Public Const Coder_Scrambler = 20
Public Const Coder_BWT2 = 21
Public Const Coder_BWT_noRecursion = 22
Private CodName(22) As String
'constants for the compressor types
Public Const Compressor_HuffmanCodes = 1
Public Const Compressor_Grouping64 = 2
Public Const Compressor_SmartGrouping = 3
Public Const Compressor_VBC1 = 4
Public Const Compressor_VBC2 = 5
Public Const Compressor_VBCR = 6
Public Const Compressor_LZW_Dynamic = 7
Public Const Compressor_LZW_Static = 8
Public Const Compressor_HuffmanShortDict = 9
Public Const Compressor_Eliminator = 10
Public Const Compressor_Combiner2Bytes = 11
Public Const Compressor_Combiner3Bytes = 12
Public Const Compressor_CombinerVariable = 13
Public Const Compressor_Word1 = 14
Public Const Compressor_Word2 = 15
Public Const Compressor_EliasGamma = 16
Public Const Compressor_EliasDelta = 17
Public Const Compressor_Fibonacci = 18
Public Const Compressor_LZW_Predefined = 19
Public Const Compressor_LZW_Multidict1Stream = 20
Public Const Compressor_LZW_LZSS = 21
Public Const Compressor_LZW_Multidict4Streams = 22
Public Const Compressor_Reducer_Static = 23
Public Const Compressor_Reducer_Dynamic = 24
Public Const Compressor_Reducer_Preselect1 = 25
Public Const Compressor_Reducer_Preselect2 = 26
Public Const Compressor_Reducer_Preselect3 = 27
Public Const Compressor_Reducer_withHuffcodes = 28
Public Const Compressor_Reducer_HalfDictwithHuffcodes = 29
Public Const Compressor_Reducer_Dict16withHuffcodes = 30
Public Const Compressor_RLE4isRun = 31
Public Const Compressor_RLEVar = 32
Public Const Compressor_RLEVarLoop = 33
Public Const Compressor_LZSS = 34
Public Const Compressor_SmartGrouping4Streams = 35
Public Const Compressor_HuffmanShort16Chars = 36
Public Const Compressor_Arithmetic = 37
Public Const Compressor_LBE_Flat = 38
Public Const Compressor_LBE_3D = 39
Public Const Compressor_LBE_3D_2 = 40
Public Const Compressor_Arithmetic_DMC = 41
Public Const Compressor_Eliminator_Loop = 42
Public Const Compressor_Arithmetic_Dynamic = 43
Public Const Compressor_Reducer_Dynamic_Golomb = 44
Public Const Compressor_Reducer_Dynamic_Elias_Gamma = 45
Public Const Compressor_Arithmetic_Dynamic_With_Dict = 46
Public Const Compressor_Arithmetic_Dynamic_With_Dict_Rescale = 47
Public Const Compressor_Arithmetic_DMC_Rescale = 48
Public Const Compressor_Orderer = 49
Public Const Compressor_VBC_Dynamic = 50
Public Const Compressor_VBC_Dynamic2 = 51
Public Const Compressor_Stripper = 52
Public Const Compressor_Huffman_Dynamic = 53
Public Const Compressor_Pairing = 54
Public Const Compressor_Pairing128 = 55
Public Const Compressor_LZSS_Lazy_Matching = 56
Public Const Compressor_LZW_Static_Hash = 57
Public Const Compressor_LZW_Dynamic_Hash = 58
Public Const Compressor_Huffman_Non_Greedy = 59
Public Const Compressor_Huffman_Non_Greedy2 = 60
Public Const Compressor_Shortener = 61
Public Const Compressor_RLE3 = 62
Public Const Compressor_LZSS_2 = 63
Public Const Compressor_LZSS_3 = 64
Public CompName(64) As String
Private AutoDecodeIsOn As Boolean 'to see if autodecode is used
'this routine is to initialize the text which can be returned to
'the user to say which compressor/coder is used
Public Sub Init_CoderNameDataBase()
CodName(Coder_Differantiator) = "Differentiator"
CodName(Coder_AddDifferantiator) = "Add Differentiator"
CodName(Coder_BWT) = "Burrows-Wheeler Transform type 1"
CodName(Coder_Fix128) = "Fix 128 bit 7"
CodName(Coder_Fix128B) = "Fix 128 bit 1"
CodName(Coder_Seperator) = "Seperator"
CodName(Coder_Flatter64) = "Flatter 64"
CodName(Coder_Flatter16) = "Flatter 16"
CodName(Coder_FrequentieShifter) = "Frequentie Shifter"
CodName(Coder_MTF_No_Header) = "Move to Front coder without header"
CodName(Coder_MTF_With_Header) = "Move to Front coder with header"
CodName(Coder_SortSwap) = "Sort & Swap"
CodName(Coder_Used_To_Front) = "Used to Front"
CodName(Coder_ValueDownShift) = "Value DOWN shifter"
CodName(Coder_ValueUpShift) = "Value UP shifter"
CodName(Coder_ValueTwister) = "Value Twister"
CodName(Coder_Base64) = "Base 64"
CodName(Coder_Numerator) = "Numerator Version 1"
CodName(Coder_Numerator2) = "Numerator Version 2"
CodName(Coder_Scrambler) = "Scrambler"
CodName(Coder_BWT2) = "Burrows-Wheeler Transform type 2"
CodName(Coder_BWT_noRecursion) = "Burrows-Wheeler Transform type 3"
CompName(Compressor_Combiner2Bytes) = "2 bytes Combiner"
CompName(Compressor_Combiner3Bytes) = "3 bytes Combiner"
CompName(Compressor_CombinerVariable) = "Variable bytes Combiner"
CompName(Compressor_EliasDelta) = "Elias Delta"
CompName(Compressor_EliasGamma) = "Elias Gamma"
CompName(Compressor_Eliminator) = "Eliminator"
CompName(Compressor_Eliminator_Loop) = "Eliminator Loop"
CompName(Compressor_Fibonacci) = "Fibonacci"
CompName(Compressor_Grouping64) = "Grouping 64"
CompName(Compressor_HuffmanCodes) = "Huffman with Long dictionary"
CompName(Compressor_HuffmanShortDict) = "Huffman with Short dictionary"
CompName(Compressor_HuffmanShort16Chars) = "Huffman 16 chars"
CompName(Compressor_Huffman_Non_Greedy) = "Huffman Non Greedy type 1"
CompName(Compressor_Huffman_Non_Greedy2) = "Huffman Non Greedy type 2"
CompName(Compressor_LZSS) = "LZSS"
CompName(Compressor_LZSS_Lazy_Matching) = "LZSS with Lazy Matching"
CompName(Compressor_LZW_Dynamic) = "LZW-dynamic"
CompName(Compressor_LZW_Dynamic_Hash) = "LZW-dynamic with hashing"
CompName(Compressor_LZW_LZSS) = "LZW 1 dict (Like LZSS)"
CompName(Compressor_LZW_Multidict1Stream) = "LZW multidict 1 stream"
CompName(Compressor_LZW_Multidict4Streams) = "LZW multidict 4 streams"
CompName(Compressor_LZW_Predefined) = "LZW-Predefined"
CompName(Compressor_LZW_Static) = "LZW-Static"
CompName(Compressor_LZW_Static_Hash) = "LZW-Static with hashing"
CompName(Compressor_Reducer_Dict16withHuffcodes) = "Reducer Dynamic 16 dict"
CompName(Compressor_Reducer_Dynamic) = "Reducer Dynamic"
CompName(Compressor_Reducer_HalfDictwithHuffcodes) = "Reducer Dynamic half dictionary"
CompName(Compressor_Reducer_Preselect1) = "Reducer Dynamic Predefined 1"
CompName(Compressor_Reducer_Preselect2) = "Reducer Dynamic Predefined 2"
CompName(Compressor_Reducer_Preselect3) = "Reducer Dynamic Predefined 3"
CompName(Compressor_Reducer_Static) = "Reducer Static"
CompName(Compressor_Reducer_withHuffcodes) = "Reducer Dynamic with Huffcodes"
CompName(Compressor_RLE4isRun) = "RLE 4=run"
CompName(Compressor_RLEVar) = "RLE Variable 1 run"
CompName(Compressor_RLEVarLoop) = "RLE Variable Loop"
CompName(Compressor_SmartGrouping) = "Smart Grouping 1 stream"
CompName(Compressor_SmartGrouping4Streams) = "Smart Grouping 4 streams"
CompName(Compressor_VBC1) = "VBC 1 run-1"
CompName(Compressor_VBC2) = "VBC 1 run-2"
CompName(Compressor_VBCR) = "VBC Reorderble"
CompName(Compressor_VBC_Dynamic) = "VBC Dynamic Type 1"
CompName(Compressor_VBC_Dynamic2) = "VBC Dynamic Type 2"
CompName(Compressor_Word1) = "Word (needs even numbers)"
CompName(Compressor_Word2) = "Word (no special needs)"
CompName(Compressor_Arithmetic) = "Arithmetic compressor"
CompName(Compressor_LBE_Flat) = "Location Based Encoding Flat version"
CompName(Compressor_LBE_3D) = "Location Based Encoding 3D version"
CompName(Compressor_LBE_3D_2) = "Location Based Encoding 3D/2 version"
CompName(Compressor_Arithmetic_DMC) = "Dynamic Arithmetic compressor Bitwise"
CompName(Compressor_Arithmetic_Dynamic) = "Dynamic Arithmetic compressor"
CompName(Compressor_Reducer_Dynamic_Golomb) = "Reducer dynamic with Golomb codes"
CompName(Compressor_Reducer_Dynamic_Elias_Gamma) = "Reducer dynamic with Elias gamma codes"
CompName(Compressor_Arithmetic_Dynamic_With_Dict) = "Dynamic Arithmetic compressor with dictionary"
CompName(Compressor_Arithmetic_Dynamic_With_Dict_Rescale) = "Dynamic Arithmetic compressor with dictionary and rescale"
CompName(Compressor_Arithmetic_DMC_Rescale) = "Dynamic Arithmetic compressor Bitwise and rescale"
CompName(Compressor_Orderer) = "Orderer"
CompName(Compressor_Stripper) = "Stripper"
CompName(Compressor_Huffman_Dynamic) = "Huffman Dynamic"
CompName(Compressor_Pairing) = "Pairing 64 chars"
CompName(Compressor_Pairing128) = "Pairing 128 chars"
CompName(Compressor_Shortener) = "Shortener"
CompName(Compressor_RLE3) = "RLE variable width"
CompName(Compressor_LZSS_2) = "LZSS without strings"
CompName(Compressor_LZSS_3) = "LZSS bytes & strings"
End Sub
'copy original array to the workarray so that whe can work on it without
'changing the original contents
Public Sub Copy_Orig2Work()
ReDim WorkArray(UBound(OriginalArray))
Call CopyMem(WorkArray(0), OriginalArray(0), UBound(OriginalArray) + 1)
End Sub
'copy the workarray to the original array so that whe can apply a
'second compress/coder on the file
Public Sub Copy_Work2Orig()
ReDim OriginalArray(UBound(WorkArray))
Call CopyMem(OriginalArray(0), WorkArray(0), UBound(WorkArray) + 1)
End Sub
'This sub is used to start a coder
'whichcoder is the constant of the codertype
'Decode is used to say if we want to code or decode
Public Sub Start_Coder(WichCoder)
Dim Decode As Boolean
Dim StTime As Double
Dim Text As String
Dim LastUsed As Integer
If UBound(OriginalArray) = 0 Then
MsgBox "There is nothing to code/Decode"
Exit Sub
End If
If AutoDecodeIsOn = False Then
Decode = True
frmCodeDecode.Show vbModal
DoEvents
If CompDecomp = 0 Then Exit Sub
If CompDecomp = 1 Then Decode = False
Else
Decode = True
End If
If Decode = True Then
LastUsed = UsedCodecs(UBound(UsedCodecs))
If JustLoaded = True Then LastUsed = 0
If (WichCoder Or 128) <> LastUsed Then
Text = "This is not coded with the " & CodName(WichCoder) & Chr(13)
If LastUsed = 0 Then
Text = Text & "Its not coded at all"
Else
If LastUsed > 128 Then
Text = Text & "Its coded with the " & CodName(LastUsed And 127)
Else
Text = Text & "Its compressed with " & CompName(LastUsed)
End If
End If
MsgBox Text
Exit Sub
End If
Else
LastCoder = WichCoder Or 128
End If
LastDeCoded = Decode
Call Copy_Orig2Work
If JustLoaded = True Then
JustLoaded = False
ReDim UsedCodecs(0)
End If
StTime = Timer
Master.MousePointer = MousePointerConstants.vbHourglass
Select Case WichCoder
Case 1
If Decode = False Then Call Difference_Coder(WorkArray)
If Decode = True Then Call Difference_DeCoder(WorkArray)
Case 2
If Decode = False Then Call FrequentShifter_Coder(WorkArray)
If Decode = True Then Call FrequentShifter_DeCoder(WorkArray)
Case 3
If Decode = False Then Call BWT_CodecArray4(WorkArray)
If Decode = True Then Call BWT_DeCodecArray4(WorkArray)
Case 4
If Decode = False Then Call Fix128_Coder(WorkArray)
If Decode = True Then Call Fix128_DeCoder(WorkArray)
Case 5
If Decode = False Then Call FlattenTo64(WorkArray)
If Decode = True Then Call DeFlattenTo64(WorkArray)
Case 6
If Decode = False Then Call MTF_CoderArray(WorkArray)
If Decode = True Then Call MTF_DeCoderArray(WorkArray)
Case 7
If Decode = False Then Call MTF_CoderArray2(WorkArray)
If Decode = True Then Call MTF_DeCoderArray2(WorkArray)
Case 8
If Decode = False Then Call Sort_Swap_Coder(WorkArray)
If Decode = True Then Call Sort_Swap_DeCoder(WorkArray)
Case 9
If Decode = False Then Call Used2Front_Coder(WorkArray)
If Decode = True Then Call Used2Front_DeCoder(WorkArray)
Case 10
If Decode = False Then Call ValueDownShifter_Coder(WorkArray)
If Decode = True Then Call ValueDownShifter_DeCoder(WorkArray)
Case 11
If Decode = False Then Call ValueUpShifter_Coder(WorkArray)
If Decode = True Then Call ValueUpShifter_Coder(WorkArray)
Case 12
If Decode = False Then Call ValueTwister_Coder(WorkArray)
If Decode = True Then Call ValueTwister_DeCoder(WorkArray)
Case 13
If Decode = False Then Call Fix128B_Coder(WorkArray)
If Decode = True Then Call Fix128B_DeCoder(WorkArray)
Case 14
If Decode = False Then Call Seperator_Coder(WorkArray)
If Decode = True Then Call Seperator_DeCoder(WorkArray)
Case 15
If Decode = False Then Call Flatter16_coder(WorkArray)
If Decode = True Then Call Flatter16_Decoder(WorkArray)
Case 16
If Decode = False Then Call Base64Array_Encode(WorkArray)
If Decode = True Then Call Base64Array_Decode(WorkArray)
Case 17
If Decode = False Then Call Numerator_EnCoder(WorkArray)
If Decode = True Then Call Numerator_DeCoder(WorkArray)
Case 18
If Decode = False Then Call Numerator2_EnCoder(WorkArray)
If Decode = True Then Call Numerator2_DeCoder(WorkArray)
Case 19
If Decode = False Then Call AddDiffer_Coder(WorkArray)
If Decode = True Then Call AddDiffer_DeCoder(WorkArray)
Case 20
If Decode = False Then Call Scrambler_Coder(WorkArray)
If Decode = True Then Call Scrambler_DeCoder(WorkArray)
Case 21
If Decode = False Then Call BWT_CodecArray2(WorkArray)
If Decode = True Then Call BWT_DeCodecArray2(WorkArray)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -