Huffman.cpp
Upload User: hbtiangong
Upload Date: 2009-03-29
Package Size: 255k
Code Size: 8k
Category:

Windows Develop

Development Platform:

Visual C++

  1. /**************************************************************************
  2. This file contains T.4 decoding data
  3. Contents are :
  4. a) two binary trees for decoding MH fax run-length codes
  5. b) one binary tree for decoding MR codes.
  6. c) one lookup table of inverted characters
  7. MH trees = one tree for white run lengths,  one tree for black run lengths.
  8. All decodes for all trees start from the top.
  9. For each node the first leaf is the offset from the root to the next
  10. node if the current bit is 0,  and the second leaf is the offset to
  11. the next node if the bit is 1.  A minus value is a terminator,  with a
  12. run-length equal to the negation of the minus value.     
  13. ******************************************************************************/
  14. #include "stdafx.h"
  15. #include "TifHeader.h"
  16. #include "huffman.h"
  17. const int gWTree [][2] =
  18. {
  19. {1, 80},          /* 0 */
  20. {40, 2},          /* 1 */
  21. {21, 3},          /* 2 */
  22. {4, -2},          /* 3 */
  23. {16, 5},          /* 4 */
  24. {10, 6},          /* 5 */
  25. {7, -256},        /* 6 */
  26. {9, 8},           /* 7 */
  27. {-1344, -1408},   /* 8 */
  28. {-1216, -1280},   /* 9 */
  29. {11, 13},         /* 10 */
  30. {-576, 12},       /* 11 */
  31. {-832, -896},     /* 12 */
  32. {14, 15},         /* 13 */
  33. {-960, -1024},    /* 14 */
  34. {-1088, -1152},   /* 15 */
  35. {-1664, 17},      /* 16 */
  36. {18, 19},         /* 17 */
  37. {-448, -512},     /* 18 */
  38. {20, -640},       /* 19 */
  39. {-704, -768},     /* 20 */
  40. {32, 22},         /* 21 */
  41. {23, 28},         /* 22 */
  42. {24, 26},         /* 23 */
  43. {-24, 25},        /* 24 */
  44. {-49, -50},       /* 25 */
  45. {27, -25},        /* 26 */
  46. {-51, -52},       /* 27 */
  47. {29, -192},       /* 28 */
  48. {30, 31},         /* 29 */
  49. {-55, -56},       /* 30 */
  50. {-57, -58},       /* 31 */
  51. {-11, 33},        /* 32 */
  52. {34, 36},         /* 33 */
  53. {-27, 35},        /* 34 */
  54. {-59, -60},       /* 35 */
  55. {37, -18},        /* 36 */
  56. {38, 39},         /* 37 */
  57. {-1472, -1536},   /* 38 */
  58. {-1600, -1728},   /* 39 */
  59. {59, 41},         /* 40 */
  60. {49, 42},         /* 41 */
  61. {43, -10},        /* 42 */
  62. {47, 44},         /* 43 */
  63. {46, 45},         /* 44 */
  64. {-320, -384},     /* 45 */
  65. {-63, 0},         /* 46 */
  66. {-28, 48},        /* 47 */
  67. {-61, -62},       /* 48 */
  68. {56, 50},         /* 49 */
  69. {53, 51},         /* 50 */
  70. {52, -21},        /* 51 */
  71. {-43, -44},       /* 52 */
  72. {55, 54},         /* 53 */
  73. {-41, -42},       /* 54 */
  74. {-39, -40},       /* 55 */
  75. {-12, 57},        /* 56 */
  76. {58, -26},        /* 57 */
  77. {-53, -54},       /* 58 */
  78. {70, 60},         /* 59 */
  79. {64, 61},         /* 60 */
  80. {62, -1},         /* 61 */
  81. {-19, 63},        /* 62 */
  82. {-31, -32},       /* 63 */
  83. {68, 65},         /* 64 */
  84. {67, 66},         /* 65 */
  85. {-37, -38},       /* 66 */
  86. {-35, -36},       /* 67 */
  87. {-20, 69},        /* 68 */
  88. {-33, -34},       /* 69 */
  89. {74, 71},         /* 70 */
  90. {72, -13},        /* 71 */
  91. {-23, 73},        /* 72 */
  92. {-47, -48},       /* 73 */
  93. {77, 75},         /* 74 */
  94. {76, -22},        /* 75 */
  95. {-45, -46},       /* 76 */
  96. {79, 78},         /* 77 */
  97. {-29, -30},       /* 78 */
  98. {OUREOL, BADRUN}, /* 79 */
  99. {86, 81},         /* 80 */
  100. {83, 82},         /* 81 */
  101. {-6, -7},         /* 82 */
  102. {-5, 84},         /* 83 */
  103. {85, -64},        /* 84 */
  104. {-14, -15},       /* 85 */
  105. {90, 87},         /* 86 */
  106. {88, -4},         /* 87 */
  107. {-9, 89},         /* 88 */
  108. {-16, -17},       /* 89 */
  109. {-3, 91},         /* 90 */
  110. {-128, -8}        /* 91 */
  111. };
  112. const int gBTree[][2] =
  113. {
  114.       {2, 1},           /* 0 */
  115.       {-3, -2},         /* 1 */
  116.       {4, 3},           /* 2 */
  117.       {-1, -4},         /* 3 */
  118.       {6, 5},           /* 4 */
  119.       {-6, -5},         /* 5 */
  120.       {9, 7},           /* 6 */
  121.       {8, -7},          /* 7 */
  122.       {-9, -8},         /* 8 */
  123.       {31, 10},         /* 9 */
  124.       {30, 11},         /* 10 */
  125.       {12, -12},        /* 11 */
  126.       {23, 13},         /* 12 */
  127.       {17, 14},         /* 13 */
  128.       {15, 0},          /* 14 */
  129.       {-21, 16},        /* 15 */
  130.       {-42, -43},       /* 16 */
  131.       {21, 18},         /* 17 */
  132.       {20, 19},         /* 18 */
  133.       {-38, -39},       /* 19 */
  134.       {-36, -37},       /* 20 */
  135.       {-20, 22},        /* 21 */
  136.       {-34, -35},       /* 22 */
  137.       {-15, 24},        /* 23 */
  138.       {27, 25},         /* 24 */
  139.       {26, -19},        /* 25 */
  140.       {-28, -29},       /* 26 */
  141.       {29, 28},         /* 27 */
  142.       {-26, -27},       /* 28 */
  143.       {-128, -192},     /* 29 */
  144.       {-10, -11},       /* 30 */
  145.       {57, 32},         /* 31 */
  146.       {45, 33},         /* 32 */
  147.       {34, -14},        /* 33 */
  148.       {41, 35},         /* 34 */
  149.       {38, 36},         /* 35 */
  150.       {37, -22},        /* 36 */
  151.       {-40, -41},       /* 37 */
  152.       {40, 39},         /* 38 */
  153.       {-32, -33},       /* 39 */
  154.       {-30, -31},       /* 40 */
  155.       {-17, 42},        /* 41 */
  156.       {44, 43},         /* 42 */
  157.       {-62, -63},       /* 43 */
  158.       {-48, -49},       /* 44 */
  159.       {-13, 46},        /* 45 */
  160.       {51, 47},         /* 46 */
  161.       {48, -16},        /* 47 */
  162.       {50, 49},         /* 48 */
  163.       {-61, -256},      /* 49 */
  164.       {-57, -58},       /* 50 */
  165.       {55, 52},         /* 51 */
  166.       {54, 53},         /* 52 */
  167.       {-46, -47},       /* 53 */
  168.       {-44, -45},       /* 54 */
  169.       {-23, 56},        /* 55 */
  170.       {-50, -51},       /* 56 */
  171.       {OUREOL, 58},     /* 57 */
  172.       {75, 59},         /* 58 */
  173.       {67, 60},         /* 59 */
  174.       {61, -64},        /* 60 */
  175.       {65, 62},         /* 61 */
  176.       {64, 63},         /* 62 */
  177.       {-1152, -1216},   /* 63 */
  178.       {-1024, -1088},   /* 64 */
  179.       {-54, 66},        /* 65 */
  180.       {-896, -960},     /* 66 */
  181.       {72, 68},         /* 67 */
  182.       {71, 69},         /* 68 */
  183.       {70, -53},        /* 69 */
  184.       {-512, -576},     /* 70 */
  185.       {-384, -448},     /* 71 */
  186.       {-25, 73},        /* 72 */
  187.       {74, -320},       /* 73 */
  188.       {-1664, -1728},   /* 74 */
  189.       {85, 76},         /* 75 */
  190.       {80, 77},         /* 76 */
  191.       {78, -24},        /* 77 */
  192.       {-60, 79},        /* 78 */
  193.       {-1536, -1600},   /* 79 */
  194.       {83, 81},         /* 80 */
  195.       {82, -59},        /* 81 */
  196.       {-1408, -1472},   /* 82 */
  197.       {-56, 84},        /* 83 */
  198.       {-1280, -1344},   /* 84 */
  199.       {-18, 86},        /* 85 */
  200.       {89, 87},         /* 86 */
  201.       {88, -55},        /* 87 */
  202.       {-768, -832},     /* 88 */
  203.       {-52, 90},        /* 89 */
  204.       {-640, -704}      /* 90 */
  205. };
  206. const int gTwoTree [][2] =
  207. {
  208.       {1, VTMODE0},        /* 0 */
  209.       {2, 3},              /* 1 */
  210.       {4, HORZMODE},       /* 2 */
  211.       {VTMODE1N, VTMODE1P},/* 3 */
  212.       {5, PASSMODE},       /* 4 */
  213.       {6, 7},              /* 5 */
  214.       {8, 9},              /* 6 */
  215.       {VTMODE2N, VTMODE2P},/* 7 */
  216.       {OUREOL, BADRUN},    /* 8 */
  217.       {VTMODE3N, VTMODE3P} /* 9 */
  218. };
  219. const unsigned char gBackward[256] =
  220. {
  221.    0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0,
  222.    0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8,
  223.    0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4,
  224.    0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC,
  225.    0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2,
  226.    0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA,
  227.    0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6,
  228.    0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE,
  229.    0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1,
  230.    0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9,
  231.    0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5,
  232.    0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD,
  233.    0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3,
  234.    0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB,
  235.    0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7,
  236.    0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF
  237. };