Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1464 lines
59 KiB

  1. #include "precomp.hpp"
  2. namespace Globals
  3. {
  4. const BYTE TextContrastTableIdentity[256] = {
  5. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  6. 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
  7. 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  8. 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
  9. 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
  10. 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
  11. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  12. 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  13. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  14. 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
  15. 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  16. 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
  17. 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
  18. 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
  19. 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  20. 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  21. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  22. 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  23. 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  24. 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
  25. 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
  26. 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
  27. 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
  28. 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
  29. 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
  30. 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
  31. 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
  32. 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
  33. 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
  34. 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
  35. 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
  36. 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
  37. };
  38. TEXT_CONTRAST_TABLES TextContrastTablesDir =
  39. {
  40. { // 1.1
  41. 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05,
  42. 0x06, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0A, 0x0B,
  43. 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x10, 0x11, 0x12,
  44. 0x13, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x19,
  45. 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x1F, 0x20,
  46. 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
  47. 0x29, 0x2A, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
  48. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  49. 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3E,
  50. 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
  51. 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
  52. 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
  53. 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
  54. 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
  55. 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
  56. 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
  57. 0x77, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  58. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  59. 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  60. 0x90, 0x91, 0x92, 0x93, 0x95, 0x96, 0x97, 0x98,
  61. 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0,
  62. 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA9,
  63. 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1,
  64. 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xBA,
  65. 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
  66. 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC9, 0xCA, 0xCB,
  67. 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3,
  68. 0xD4, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
  69. 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE3, 0xE4, 0xE5,
  70. 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED,
  71. 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6,
  72. 0xF7, 0xF8, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
  73. },
  74. { // 1.2
  75. 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03,
  76. 0x04, 0x05, 0x05, 0x06, 0x07, 0x07, 0x08, 0x09,
  77. 0x09, 0x0A, 0x0B, 0x0B, 0x0C, 0x0D, 0x0D, 0x0E,
  78. 0x0F, 0x10, 0x10, 0x11, 0x12, 0x13, 0x14, 0x14,
  79. 0x15, 0x16, 0x17, 0x18, 0x18, 0x19, 0x1A, 0x1B,
  80. 0x1C, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
  81. 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x28,
  82. 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
  83. 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  84. 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3E,
  85. 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
  86. 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
  87. 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
  88. 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
  89. 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
  90. 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
  91. 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  92. 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  93. 0x80, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
  94. 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x90, 0x91,
  95. 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
  96. 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2,
  97. 0xA3, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
  98. 0xAC, 0xAD, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
  99. 0xB5, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
  100. 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7,
  101. 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCF, 0xD0,
  102. 0xD1, 0xD2, 0xD3, 0xD4, 0xD6, 0xD7, 0xD8, 0xD9,
  103. 0xDA, 0xDB, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2,
  104. 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xEA, 0xEB, 0xEC,
  105. 0xED, 0xEE, 0xEF, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
  106. 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFD, 0xFE, 0xFF
  107. },
  108. { // 1.3
  109. 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02,
  110. 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06,
  111. 0x07, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0B, 0x0B,
  112. 0x0C, 0x0C, 0x0D, 0x0E, 0x0E, 0x0F, 0x10, 0x10,
  113. 0x11, 0x12, 0x13, 0x13, 0x14, 0x15, 0x15, 0x16,
  114. 0x17, 0x18, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1C,
  115. 0x1D, 0x1E, 0x1F, 0x1F, 0x20, 0x21, 0x22, 0x23,
  116. 0x24, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x29,
  117. 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x2F, 0x30,
  118. 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
  119. 0x39, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  120. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  121. 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4C, 0x4D, 0x4E,
  122. 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
  123. 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
  124. 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
  125. 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x70,
  126. 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
  127. 0x79, 0x7A, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
  128. 0x82, 0x83, 0x84, 0x85, 0x87, 0x88, 0x89, 0x8A,
  129. 0x8B, 0x8C, 0x8D, 0x8F, 0x90, 0x91, 0x92, 0x93,
  130. 0x94, 0x95, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
  131. 0x9D, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA6,
  132. 0xA7, 0xA8, 0xA9, 0xAA, 0xAC, 0xAD, 0xAE, 0xAF,
  133. 0xB0, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9,
  134. 0xBA, 0xBB, 0xBC, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
  135. 0xC4, 0xC5, 0xC6, 0xC7, 0xC9, 0xCA, 0xCB, 0xCC,
  136. 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD4, 0xD5, 0xD6,
  137. 0xD7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDE, 0xDF, 0xE0,
  138. 0xE2, 0xE3, 0xE4, 0xE5, 0xE7, 0xE8, 0xE9, 0xEA,
  139. 0xEC, 0xED, 0xEE, 0xF0, 0xF1, 0xF2, 0xF3, 0xF5,
  140. 0xF6, 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFE, 0xFF
  141. },
  142. { // 1.4
  143. 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02,
  144. 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05,
  145. 0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09,
  146. 0x09, 0x0A, 0x0A, 0x0B, 0x0C, 0x0C, 0x0D, 0x0D,
  147. 0x0E, 0x0F, 0x0F, 0x10, 0x10, 0x11, 0x12, 0x12,
  148. 0x13, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18,
  149. 0x19, 0x19, 0x1A, 0x1B, 0x1C, 0x1C, 0x1D, 0x1E,
  150. 0x1F, 0x1F, 0x20, 0x21, 0x22, 0x22, 0x23, 0x24,
  151. 0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
  152. 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x31,
  153. 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
  154. 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,
  155. 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
  156. 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
  157. 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
  158. 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60,
  159. 0x61, 0x62, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69,
  160. 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
  161. 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
  162. 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x84,
  163. 0x85, 0x86, 0x87, 0x88, 0x89, 0x8B, 0x8C, 0x8D,
  164. 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x97,
  165. 0x98, 0x99, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA0,
  166. 0xA1, 0xA3, 0xA4, 0xA5, 0xA6, 0xA8, 0xA9, 0xAA,
  167. 0xAB, 0xAD, 0xAE, 0xAF, 0xB0, 0xB2, 0xB3, 0xB4,
  168. 0xB5, 0xB7, 0xB8, 0xB9, 0xBB, 0xBC, 0xBD, 0xBE,
  169. 0xC0, 0xC1, 0xC2, 0xC4, 0xC5, 0xC6, 0xC8, 0xC9,
  170. 0xCA, 0xCB, 0xCD, 0xCE, 0xCF, 0xD1, 0xD2, 0xD3,
  171. 0xD5, 0xD6, 0xD7, 0xD9, 0xDA, 0xDB, 0xDD, 0xDE,
  172. 0xDF, 0xE1, 0xE2, 0xE3, 0xE5, 0xE6, 0xE8, 0xE9,
  173. 0xEA, 0xEC, 0xED, 0xEE, 0xF0, 0xF1, 0xF2, 0xF4,
  174. 0xF5, 0xF7, 0xF8, 0xF9, 0xFB, 0xFC, 0xFE, 0xFF
  175. },
  176. { // 1.5
  177. 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
  178. 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04,
  179. 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07,
  180. 0x07, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0A, 0x0B,
  181. 0x0B, 0x0C, 0x0C, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F,
  182. 0x10, 0x10, 0x11, 0x12, 0x12, 0x13, 0x14, 0x14,
  183. 0x15, 0x15, 0x16, 0x17, 0x17, 0x18, 0x19, 0x1A,
  184. 0x1A, 0x1B, 0x1C, 0x1C, 0x1D, 0x1E, 0x1F, 0x1F,
  185. 0x20, 0x21, 0x22, 0x22, 0x23, 0x24, 0x25, 0x25,
  186. 0x26, 0x27, 0x28, 0x29, 0x29, 0x2A, 0x2B, 0x2C,
  187. 0x2D, 0x2E, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
  188. 0x34, 0x35, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
  189. 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x41,
  190. 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
  191. 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
  192. 0x52, 0x53, 0x54, 0x55, 0x56, 0x58, 0x59, 0x5A,
  193. 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62,
  194. 0x63, 0x64, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,
  195. 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x72, 0x73, 0x74,
  196. 0x75, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7E,
  197. 0x7F, 0x80, 0x81, 0x82, 0x84, 0x85, 0x86, 0x87,
  198. 0x88, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x90, 0x91,
  199. 0x92, 0x93, 0x95, 0x96, 0x97, 0x98, 0x9A, 0x9B,
  200. 0x9C, 0x9E, 0x9F, 0xA0, 0xA1, 0xA3, 0xA4, 0xA5,
  201. 0xA7, 0xA8, 0xA9, 0xAB, 0xAC, 0xAD, 0xAE, 0xB0,
  202. 0xB1, 0xB2, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9, 0xBB,
  203. 0xBC, 0xBD, 0xBF, 0xC0, 0xC1, 0xC3, 0xC4, 0xC5,
  204. 0xC7, 0xC8, 0xCA, 0xCB, 0xCC, 0xCE, 0xCF, 0xD1,
  205. 0xD2, 0xD3, 0xD5, 0xD6, 0xD8, 0xD9, 0xDA, 0xDC,
  206. 0xDD, 0xDF, 0xE0, 0xE2, 0xE3, 0xE4, 0xE6, 0xE7,
  207. 0xE9, 0xEA, 0xEC, 0xED, 0xEF, 0xF0, 0xF2, 0xF3,
  208. 0xF5, 0xF6, 0xF8, 0xF9, 0xFB, 0xFC, 0xFE, 0xFF
  209. },
  210. { // 1.6
  211. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
  212. 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x03,
  213. 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
  214. 0x06, 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x09,
  215. 0x09, 0x0A, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0D,
  216. 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x10, 0x10, 0x11,
  217. 0x12, 0x12, 0x13, 0x13, 0x14, 0x15, 0x15, 0x16,
  218. 0x17, 0x17, 0x18, 0x19, 0x19, 0x1A, 0x1B, 0x1B,
  219. 0x1C, 0x1D, 0x1D, 0x1E, 0x1F, 0x1F, 0x20, 0x21,
  220. 0x22, 0x22, 0x23, 0x24, 0x25, 0x26, 0x26, 0x27,
  221. 0x28, 0x29, 0x2A, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  222. 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
  223. 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
  224. 0x3D, 0x3E, 0x3F, 0x40, 0x40, 0x41, 0x42, 0x43,
  225. 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,
  226. 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x53, 0x54,
  227. 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C,
  228. 0x5D, 0x5E, 0x5F, 0x61, 0x62, 0x63, 0x64, 0x65,
  229. 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
  230. 0x6F, 0x71, 0x72, 0x73, 0x74, 0x75, 0x77, 0x78,
  231. 0x79, 0x7A, 0x7B, 0x7D, 0x7E, 0x7F, 0x80, 0x82,
  232. 0x83, 0x84, 0x85, 0x87, 0x88, 0x89, 0x8A, 0x8C,
  233. 0x8D, 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x95, 0x96,
  234. 0x97, 0x99, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA1,
  235. 0xA2, 0xA3, 0xA5, 0xA6, 0xA7, 0xA9, 0xAA, 0xAB,
  236. 0xAD, 0xAE, 0xB0, 0xB1, 0xB2, 0xB4, 0xB5, 0xB7,
  237. 0xB8, 0xB9, 0xBB, 0xBC, 0xBE, 0xBF, 0xC1, 0xC2,
  238. 0xC4, 0xC5, 0xC6, 0xC8, 0xC9, 0xCB, 0xCC, 0xCE,
  239. 0xCF, 0xD1, 0xD2, 0xD4, 0xD5, 0xD7, 0xD8, 0xDA,
  240. 0xDB, 0xDD, 0xDE, 0xE0, 0xE1, 0xE3, 0xE4, 0xE6,
  241. 0xE7, 0xE9, 0xEB, 0xEC, 0xEE, 0xEF, 0xF1, 0xF2,
  242. 0xF4, 0xF5, 0xF7, 0xF9, 0xFA, 0xFC, 0xFD, 0xFF
  243. },
  244. { // 1.7
  245. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  246. 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
  247. 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
  248. 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07,
  249. 0x07, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0A, 0x0A,
  250. 0x0B, 0x0B, 0x0C, 0x0C, 0x0D, 0x0D, 0x0E, 0x0E,
  251. 0x0F, 0x0F, 0x10, 0x11, 0x11, 0x12, 0x12, 0x13,
  252. 0x13, 0x14, 0x15, 0x15, 0x16, 0x16, 0x17, 0x18,
  253. 0x18, 0x19, 0x1A, 0x1A, 0x1B, 0x1C, 0x1C, 0x1D,
  254. 0x1E, 0x1E, 0x1F, 0x20, 0x21, 0x21, 0x22, 0x23,
  255. 0x24, 0x24, 0x25, 0x26, 0x27, 0x27, 0x28, 0x29,
  256. 0x2A, 0x2B, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
  257. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  258. 0x38, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,
  259. 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
  260. 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
  261. 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
  262. 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
  263. 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x69,
  264. 0x6A, 0x6B, 0x6C, 0x6D, 0x6F, 0x70, 0x71, 0x72,
  265. 0x73, 0x75, 0x76, 0x77, 0x78, 0x7A, 0x7B, 0x7C,
  266. 0x7D, 0x7F, 0x80, 0x81, 0x83, 0x84, 0x85, 0x86,
  267. 0x88, 0x89, 0x8A, 0x8C, 0x8D, 0x8E, 0x90, 0x91,
  268. 0x92, 0x94, 0x95, 0x97, 0x98, 0x99, 0x9B, 0x9C,
  269. 0x9D, 0x9F, 0xA0, 0xA2, 0xA3, 0xA4, 0xA6, 0xA7,
  270. 0xA9, 0xAA, 0xAC, 0xAD, 0xAE, 0xB0, 0xB1, 0xB3,
  271. 0xB4, 0xB6, 0xB7, 0xB9, 0xBA, 0xBC, 0xBD, 0xBF,
  272. 0xC0, 0xC2, 0xC3, 0xC5, 0xC6, 0xC8, 0xC9, 0xCB,
  273. 0xCD, 0xCE, 0xD0, 0xD1, 0xD3, 0xD4, 0xD6, 0xD8,
  274. 0xD9, 0xDB, 0xDC, 0xDE, 0xE0, 0xE1, 0xE3, 0xE4,
  275. 0xE6, 0xE8, 0xE9, 0xEB, 0xED, 0xEE, 0xF0, 0xF2,
  276. 0xF3, 0xF5, 0xF7, 0xF8, 0xFA, 0xFC, 0xFD, 0xFF
  277. },
  278. { // 1.8
  279. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  280. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
  281. 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03,
  282. 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06,
  283. 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09,
  284. 0x09, 0x0A, 0x0A, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C,
  285. 0x0D, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x10, 0x10,
  286. 0x11, 0x11, 0x12, 0x12, 0x13, 0x13, 0x14, 0x15,
  287. 0x15, 0x16, 0x16, 0x17, 0x18, 0x18, 0x19, 0x1A,
  288. 0x1A, 0x1B, 0x1C, 0x1C, 0x1D, 0x1E, 0x1E, 0x1F,
  289. 0x20, 0x20, 0x21, 0x22, 0x23, 0x23, 0x24, 0x25,
  290. 0x26, 0x26, 0x27, 0x28, 0x29, 0x29, 0x2A, 0x2B,
  291. 0x2C, 0x2D, 0x2E, 0x2E, 0x2F, 0x30, 0x31, 0x32,
  292. 0x33, 0x34, 0x35, 0x35, 0x36, 0x37, 0x38, 0x39,
  293. 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41,
  294. 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
  295. 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
  296. 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5A,
  297. 0x5B, 0x5C, 0x5D, 0x5F, 0x60, 0x61, 0x62, 0x63,
  298. 0x64, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
  299. 0x6E, 0x6F, 0x71, 0x72, 0x73, 0x74, 0x76, 0x77,
  300. 0x78, 0x7A, 0x7B, 0x7C, 0x7E, 0x7F, 0x80, 0x81,
  301. 0x83, 0x84, 0x86, 0x87, 0x88, 0x8A, 0x8B, 0x8C,
  302. 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x95, 0x96, 0x98,
  303. 0x99, 0x9A, 0x9C, 0x9D, 0x9F, 0xA0, 0xA2, 0xA3,
  304. 0xA5, 0xA6, 0xA8, 0xA9, 0xAB, 0xAC, 0xAE, 0xAF,
  305. 0xB1, 0xB2, 0xB4, 0xB5, 0xB7, 0xB8, 0xBA, 0xBC,
  306. 0xBD, 0xBF, 0xC0, 0xC2, 0xC3, 0xC5, 0xC7, 0xC8,
  307. 0xCA, 0xCC, 0xCD, 0xCF, 0xD0, 0xD2, 0xD4, 0xD5,
  308. 0xD7, 0xD9, 0xDA, 0xDC, 0xDE, 0xE0, 0xE1, 0xE3,
  309. 0xE5, 0xE6, 0xE8, 0xEA, 0xEC, 0xED, 0xEF, 0xF1,
  310. 0xF3, 0xF4, 0xF6, 0xF8, 0xFA, 0xFB, 0xFD, 0xFF
  311. },
  312. { // 1.9
  313. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  314. 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  315. 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03,
  316. 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x05,
  317. 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07,
  318. 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0A, 0x0A,
  319. 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0E,
  320. 0x0E, 0x0F, 0x0F, 0x10, 0x10, 0x11, 0x11, 0x12,
  321. 0x12, 0x13, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16,
  322. 0x17, 0x18, 0x18, 0x19, 0x1A, 0x1A, 0x1B, 0x1C,
  323. 0x1C, 0x1D, 0x1E, 0x1E, 0x1F, 0x20, 0x20, 0x21,
  324. 0x22, 0x23, 0x23, 0x24, 0x25, 0x26, 0x26, 0x27,
  325. 0x28, 0x29, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  326. 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
  327. 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
  328. 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,
  329. 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
  330. 0x4D, 0x4E, 0x4F, 0x51, 0x52, 0x53, 0x54, 0x55,
  331. 0x56, 0x57, 0x58, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
  332. 0x5F, 0x61, 0x62, 0x63, 0x64, 0x65, 0x67, 0x68,
  333. 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x72,
  334. 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, 0x7B, 0x7D,
  335. 0x7E, 0x7F, 0x81, 0x82, 0x84, 0x85, 0x86, 0x88,
  336. 0x89, 0x8B, 0x8C, 0x8D, 0x8F, 0x90, 0x92, 0x93,
  337. 0x95, 0x96, 0x98, 0x99, 0x9B, 0x9C, 0x9E, 0x9F,
  338. 0xA1, 0xA2, 0xA4, 0xA5, 0xA7, 0xA8, 0xAA, 0xAC,
  339. 0xAD, 0xAF, 0xB0, 0xB2, 0xB4, 0xB5, 0xB7, 0xB8,
  340. 0xBA, 0xBC, 0xBD, 0xBF, 0xC1, 0xC2, 0xC4, 0xC6,
  341. 0xC7, 0xC9, 0xCB, 0xCC, 0xCE, 0xD0, 0xD2, 0xD3,
  342. 0xD5, 0xD7, 0xD9, 0xDA, 0xDC, 0xDE, 0xE0, 0xE1,
  343. 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xEC, 0xEE, 0xF0,
  344. 0xF2, 0xF4, 0xF6, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF
  345. },
  346. { // 2.0
  347. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  348. 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
  349. 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
  350. 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04,
  351. 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06,
  352. 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09,
  353. 0x09, 0x09, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0C,
  354. 0x0C, 0x0D, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x10,
  355. 0x10, 0x11, 0x11, 0x12, 0x12, 0x13, 0x13, 0x14,
  356. 0x14, 0x15, 0x15, 0x16, 0x17, 0x17, 0x18, 0x18,
  357. 0x19, 0x1A, 0x1A, 0x1B, 0x1C, 0x1C, 0x1D, 0x1E,
  358. 0x1E, 0x1F, 0x20, 0x20, 0x21, 0x22, 0x23, 0x23,
  359. 0x24, 0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x2A,
  360. 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x2F, 0x30,
  361. 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
  362. 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  363. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  364. 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
  365. 0x51, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
  366. 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x61, 0x62, 0x63,
  367. 0x64, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
  368. 0x6F, 0x70, 0x71, 0x73, 0x74, 0x75, 0x77, 0x78,
  369. 0x79, 0x7B, 0x7C, 0x7E, 0x7F, 0x80, 0x82, 0x83,
  370. 0x85, 0x86, 0x88, 0x89, 0x8B, 0x8C, 0x8E, 0x8F,
  371. 0x91, 0x92, 0x94, 0x95, 0x97, 0x98, 0x9A, 0x9B,
  372. 0x9D, 0x9E, 0xA0, 0xA2, 0xA3, 0xA5, 0xA6, 0xA8,
  373. 0xAA, 0xAB, 0xAD, 0xAF, 0xB0, 0xB2, 0xB4, 0xB5,
  374. 0xB7, 0xB9, 0xBA, 0xBC, 0xBE, 0xC0, 0xC1, 0xC3,
  375. 0xC5, 0xC7, 0xC8, 0xCA, 0xCC, 0xCE, 0xCF, 0xD1,
  376. 0xD3, 0xD5, 0xD7, 0xD9, 0xDA, 0xDC, 0xDE, 0xE0,
  377. 0xE2, 0xE4, 0xE6, 0xE8, 0xE9, 0xEB, 0xED, 0xEF,
  378. 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF
  379. },
  380. { // 2.1
  381. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  382. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
  383. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
  384. 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
  385. 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05,
  386. 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07,
  387. 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0A, 0x0A,
  388. 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0D, 0x0D, 0x0E,
  389. 0x0E, 0x0E, 0x0F, 0x0F, 0x10, 0x10, 0x11, 0x11,
  390. 0x12, 0x12, 0x13, 0x14, 0x14, 0x15, 0x15, 0x16,
  391. 0x16, 0x17, 0x18, 0x18, 0x19, 0x19, 0x1A, 0x1B,
  392. 0x1B, 0x1C, 0x1D, 0x1D, 0x1E, 0x1F, 0x1F, 0x20,
  393. 0x21, 0x21, 0x22, 0x23, 0x24, 0x24, 0x25, 0x26,
  394. 0x27, 0x28, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2C,
  395. 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x33,
  396. 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
  397. 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43,
  398. 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4B, 0x4C,
  399. 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x53, 0x54, 0x55,
  400. 0x56, 0x57, 0x58, 0x5A, 0x5B, 0x5C, 0x5D, 0x5F,
  401. 0x60, 0x61, 0x62, 0x64, 0x65, 0x66, 0x68, 0x69,
  402. 0x6A, 0x6B, 0x6D, 0x6E, 0x70, 0x71, 0x72, 0x74,
  403. 0x75, 0x76, 0x78, 0x79, 0x7B, 0x7C, 0x7E, 0x7F,
  404. 0x81, 0x82, 0x83, 0x85, 0x86, 0x88, 0x89, 0x8B,
  405. 0x8D, 0x8E, 0x90, 0x91, 0x93, 0x94, 0x96, 0x97,
  406. 0x99, 0x9B, 0x9C, 0x9E, 0xA0, 0xA1, 0xA3, 0xA5,
  407. 0xA6, 0xA8, 0xAA, 0xAB, 0xAD, 0xAF, 0xB0, 0xB2,
  408. 0xB4, 0xB6, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC0,
  409. 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCB, 0xCD, 0xCF,
  410. 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF,
  411. 0xE1, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
  412. 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF
  413. },
  414. { // 2.2
  415. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  416. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  417. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  418. 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  419. 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
  420. 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06,
  421. 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09,
  422. 0x09, 0x09, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0C,
  423. 0x0C, 0x0D, 0x0D, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F,
  424. 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, 0x13, 0x13,
  425. 0x14, 0x14, 0x15, 0x16, 0x16, 0x17, 0x17, 0x18,
  426. 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1C, 0x1C, 0x1D,
  427. 0x1E, 0x1E, 0x1F, 0x20, 0x21, 0x21, 0x22, 0x23,
  428. 0x23, 0x24, 0x25, 0x26, 0x27, 0x27, 0x28, 0x29,
  429. 0x2A, 0x2B, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
  430. 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  431. 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  432. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  433. 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x51,
  434. 0x52, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, 0x5A,
  435. 0x5B, 0x5D, 0x5E, 0x5F, 0x61, 0x62, 0x63, 0x64,
  436. 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6D, 0x6E, 0x6F,
  437. 0x71, 0x72, 0x74, 0x75, 0x77, 0x78, 0x79, 0x7B,
  438. 0x7C, 0x7E, 0x7F, 0x81, 0x82, 0x84, 0x85, 0x87,
  439. 0x89, 0x8A, 0x8C, 0x8D, 0x8F, 0x91, 0x92, 0x94,
  440. 0x95, 0x97, 0x99, 0x9A, 0x9C, 0x9E, 0x9F, 0xA1,
  441. 0xA3, 0xA5, 0xA6, 0xA8, 0xAA, 0xAC, 0xAD, 0xAF,
  442. 0xB1, 0xB3, 0xB5, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE,
  443. 0xC0, 0xC2, 0xC4, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD,
  444. 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD,
  445. 0xDF, 0xE1, 0xE3, 0xE5, 0xE7, 0xEA, 0xEC, 0xEE,
  446. 0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFB, 0xFD, 0xFF
  447. }
  448. }; // g_GammaTableDir
  449. TEXT_CONTRAST_TABLES TextContrastTablesInv =
  450. {
  451. { // 1.1
  452. 0x00, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08, 0x0A,
  453. 0x0B, 0x0C, 0x0D, 0x0F, 0x10, 0x11, 0x12, 0x13,
  454. 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1D,
  455. 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26,
  456. 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  457. 0x2F, 0x30, 0x31, 0x33, 0x34, 0x35, 0x36, 0x37,
  458. 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  459. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48,
  460. 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
  461. 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
  462. 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60,
  463. 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
  464. 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
  465. 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
  466. 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80,
  467. 0x81, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  468. 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  469. 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  470. 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9C, 0x9D, 0x9E,
  471. 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
  472. 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,
  473. 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,
  474. 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
  475. 0xBE, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4,
  476. 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC,
  477. 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3,
  478. 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA,
  479. 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2,
  480. 0xE3, 0xE4, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
  481. 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xEF, 0xF0,
  482. 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
  483. 0xF9, 0xFA, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
  484. },
  485. { // 1.2
  486. 0x00, 0x03, 0x04, 0x06, 0x08, 0x0A, 0x0B, 0x0D,
  487. 0x0E, 0x10, 0x11, 0x13, 0x14, 0x15, 0x17, 0x18,
  488. 0x19, 0x1B, 0x1C, 0x1D, 0x1F, 0x20, 0x21, 0x22,
  489. 0x24, 0x25, 0x26, 0x27, 0x28, 0x2A, 0x2B, 0x2C,
  490. 0x2D, 0x2E, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
  491. 0x36, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,
  492. 0x3F, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  493. 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x50,
  494. 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
  495. 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60,
  496. 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
  497. 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
  498. 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
  499. 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80,
  500. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  501. 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  502. 0x90, 0x91, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
  503. 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9D,
  504. 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
  505. 0xA6, 0xA7, 0xA8, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC,
  506. 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB1, 0xB2, 0xB3,
  507. 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xB9, 0xBA,
  508. 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC1,
  509. 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC8,
  510. 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xCF,
  511. 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD5, 0xD6,
  512. 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDB, 0xDC, 0xDD,
  513. 0xDE, 0xDF, 0xE0, 0xE1, 0xE1, 0xE2, 0xE3, 0xE4,
  514. 0xE5, 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB,
  515. 0xEC, 0xED, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,
  516. 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF7, 0xF8,
  517. 0xF9, 0xFA, 0xFB, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF
  518. },
  519. { // 1.3
  520. 0x00, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10,
  521. 0x12, 0x13, 0x15, 0x17, 0x18, 0x1A, 0x1B, 0x1D,
  522. 0x1E, 0x20, 0x21, 0x23, 0x24, 0x25, 0x27, 0x28,
  523. 0x29, 0x2B, 0x2C, 0x2D, 0x2F, 0x30, 0x31, 0x32,
  524. 0x34, 0x35, 0x36, 0x37, 0x39, 0x3A, 0x3B, 0x3C,
  525. 0x3D, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
  526. 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
  527. 0x4F, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  528. 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
  529. 0x60, 0x61, 0x62, 0x63, 0x64, 0x66, 0x67, 0x68,
  530. 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
  531. 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  532. 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  533. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x86,
  534. 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
  535. 0x8F, 0x90, 0x91, 0x92, 0x92, 0x93, 0x94, 0x95,
  536. 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9C,
  537. 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA3,
  538. 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAA,
  539. 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB0, 0xB1,
  540. 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB6, 0xB7, 0xB8,
  541. 0xB9, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBF,
  542. 0xC0, 0xC1, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6,
  543. 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCB, 0xCC,
  544. 0xCD, 0xCE, 0xCF, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3,
  545. 0xD4, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD8, 0xD9,
  546. 0xDA, 0xDB, 0xDC, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0,
  547. 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE4, 0xE5, 0xE6,
  548. 0xE7, 0xE8, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xEC,
  549. 0xED, 0xEE, 0xEF, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3,
  550. 0xF3, 0xF4, 0xF5, 0xF6, 0xF6, 0xF7, 0xF8, 0xF9,
  551. 0xFA, 0xFA, 0xFB, 0xFC, 0xFD, 0xFD, 0xFE, 0xFF
  552. },
  553. { // 1.4
  554. 0x00, 0x05, 0x08, 0x0B, 0x0D, 0x0F, 0x12, 0x14,
  555. 0x16, 0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20, 0x22,
  556. 0x23, 0x25, 0x26, 0x28, 0x29, 0x2B, 0x2C, 0x2E,
  557. 0x2F, 0x31, 0x32, 0x33, 0x35, 0x36, 0x37, 0x39,
  558. 0x3A, 0x3B, 0x3C, 0x3E, 0x3F, 0x40, 0x41, 0x43,
  559. 0x44, 0x45, 0x46, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
  560. 0x4D, 0x4E, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
  561. 0x56, 0x57, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
  562. 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
  563. 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
  564. 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
  565. 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
  566. 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x85,
  567. 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D,
  568. 0x8E, 0x8F, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
  569. 0x95, 0x96, 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B,
  570. 0x9C, 0x9D, 0x9E, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2,
  571. 0xA3, 0xA4, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9,
  572. 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xAF,
  573. 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB4, 0xB5, 0xB6,
  574. 0xB7, 0xB8, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBC,
  575. 0xBD, 0xBE, 0xBF, 0xC0, 0xC0, 0xC1, 0xC2, 0xC3,
  576. 0xC4, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC8, 0xC9,
  577. 0xCA, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCF, 0xCF,
  578. 0xD0, 0xD1, 0xD2, 0xD3, 0xD3, 0xD4, 0xD5, 0xD6,
  579. 0xD6, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDB, 0xDC,
  580. 0xDC, 0xDD, 0xDE, 0xDF, 0xDF, 0xE0, 0xE1, 0xE2,
  581. 0xE2, 0xE3, 0xE4, 0xE5, 0xE5, 0xE6, 0xE7, 0xE8,
  582. 0xE8, 0xE9, 0xEA, 0xEB, 0xEB, 0xEC, 0xED, 0xEE,
  583. 0xEE, 0xEF, 0xF0, 0xF1, 0xF1, 0xF2, 0xF3, 0xF3,
  584. 0xF4, 0xF5, 0xF6, 0xF6, 0xF7, 0xF8, 0xF9, 0xF9,
  585. 0xFA, 0xFB, 0xFB, 0xFC, 0xFD, 0xFE, 0xFE, 0xFF
  586. },
  587. { // 1.5
  588. 0x00, 0x06, 0x0A, 0x0D, 0x10, 0x13, 0x15, 0x17,
  589. 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27,
  590. 0x28, 0x2A, 0x2C, 0x2D, 0x2F, 0x30, 0x32, 0x33,
  591. 0x35, 0x36, 0x38, 0x39, 0x3A, 0x3C, 0x3D, 0x3F,
  592. 0x40, 0x41, 0x43, 0x44, 0x45, 0x46, 0x48, 0x49,
  593. 0x4A, 0x4B, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x53,
  594. 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5B, 0x5C,
  595. 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64,
  596. 0x65, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,
  597. 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
  598. 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D,
  599. 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84,
  600. 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8A, 0x8B,
  601. 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x92,
  602. 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x99,
  603. 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x9F, 0xA0,
  604. 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5, 0xA6, 0xA7,
  605. 0xA8, 0xA9, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD,
  606. 0xAE, 0xAF, 0xB0, 0xB1, 0xB1, 0xB2, 0xB3, 0xB4,
  607. 0xB5, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xB9, 0xBA,
  608. 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC0,
  609. 0xC1, 0xC2, 0xC3, 0xC3, 0xC4, 0xC5, 0xC6, 0xC6,
  610. 0xC7, 0xC8, 0xC9, 0xC9, 0xCA, 0xCB, 0xCC, 0xCC,
  611. 0xCD, 0xCE, 0xCF, 0xCF, 0xD0, 0xD1, 0xD2, 0xD2,
  612. 0xD3, 0xD4, 0xD5, 0xD5, 0xD6, 0xD7, 0xD7, 0xD8,
  613. 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD, 0xDE,
  614. 0xDF, 0xDF, 0xE0, 0xE1, 0xE1, 0xE2, 0xE3, 0xE4,
  615. 0xE4, 0xE5, 0xE6, 0xE6, 0xE7, 0xE8, 0xE8, 0xE9,
  616. 0xEA, 0xEB, 0xEB, 0xEC, 0xED, 0xED, 0xEE, 0xEF,
  617. 0xEF, 0xF0, 0xF1, 0xF1, 0xF2, 0xF3, 0xF4, 0xF4,
  618. 0xF5, 0xF6, 0xF6, 0xF7, 0xF8, 0xF8, 0xF9, 0xFA,
  619. 0xFA, 0xFB, 0xFC, 0xFC, 0xFD, 0xFE, 0xFE, 0xFF
  620. },
  621. { // 1.6
  622. 0x00, 0x08, 0x0C, 0x10, 0x13, 0x16, 0x18, 0x1B,
  623. 0x1D, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2B,
  624. 0x2D, 0x2F, 0x31, 0x32, 0x34, 0x36, 0x37, 0x39,
  625. 0x3A, 0x3C, 0x3D, 0x3F, 0x40, 0x42, 0x43, 0x44,
  626. 0x46, 0x47, 0x48, 0x4A, 0x4B, 0x4C, 0x4E, 0x4F,
  627. 0x50, 0x51, 0x53, 0x54, 0x55, 0x56, 0x57, 0x59,
  628. 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x61, 0x62,
  629. 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
  630. 0x6B, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73,
  631. 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B,
  632. 0x7C, 0x7D, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82,
  633. 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,
  634. 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91,
  635. 0x92, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
  636. 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9E,
  637. 0x9F, 0xA0, 0xA1, 0xA2, 0xA2, 0xA3, 0xA4, 0xA5,
  638. 0xA6, 0xA7, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAB,
  639. 0xAC, 0xAD, 0xAE, 0xAF, 0xAF, 0xB0, 0xB1, 0xB2,
  640. 0xB2, 0xB3, 0xB4, 0xB5, 0xB5, 0xB6, 0xB7, 0xB8,
  641. 0xB9, 0xB9, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE,
  642. 0xBF, 0xBF, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4,
  643. 0xC4, 0xC5, 0xC6, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA,
  644. 0xCA, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCF, 0xCF,
  645. 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3, 0xD4, 0xD5,
  646. 0xD6, 0xD6, 0xD7, 0xD8, 0xD8, 0xD9, 0xDA, 0xDA,
  647. 0xDB, 0xDC, 0xDC, 0xDD, 0xDE, 0xDE, 0xDF, 0xE0,
  648. 0xE1, 0xE1, 0xE2, 0xE3, 0xE3, 0xE4, 0xE5, 0xE5,
  649. 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEB,
  650. 0xEB, 0xEC, 0xEC, 0xED, 0xEE, 0xEE, 0xEF, 0xF0,
  651. 0xF0, 0xF1, 0xF2, 0xF2, 0xF3, 0xF4, 0xF4, 0xF5,
  652. 0xF6, 0xF6, 0xF7, 0xF7, 0xF8, 0xF9, 0xF9, 0xFA,
  653. 0xFB, 0xFB, 0xFC, 0xFC, 0xFD, 0xFE, 0xFE, 0xFF
  654. },
  655. { // 1.7
  656. 0x00, 0x0A, 0x0F, 0x13, 0x16, 0x19, 0x1C, 0x1F,
  657. 0x21, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30,
  658. 0x32, 0x34, 0x36, 0x37, 0x39, 0x3B, 0x3C, 0x3E,
  659. 0x40, 0x41, 0x43, 0x44, 0x46, 0x47, 0x48, 0x4A,
  660. 0x4B, 0x4D, 0x4E, 0x4F, 0x51, 0x52, 0x53, 0x54,
  661. 0x56, 0x57, 0x58, 0x59, 0x5B, 0x5C, 0x5D, 0x5E,
  662. 0x5F, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
  663. 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
  664. 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
  665. 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80,
  666. 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x87,
  667. 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  668. 0x90, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
  669. 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9C,
  670. 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3,
  671. 0xA4, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA8, 0xA9,
  672. 0xAA, 0xAB, 0xAC, 0xAC, 0xAD, 0xAE, 0xAF, 0xAF,
  673. 0xB0, 0xB1, 0xB2, 0xB2, 0xB3, 0xB4, 0xB5, 0xB5,
  674. 0xB6, 0xB7, 0xB8, 0xB8, 0xB9, 0xBA, 0xBB, 0xBB,
  675. 0xBC, 0xBD, 0xBE, 0xBE, 0xBF, 0xC0, 0xC0, 0xC1,
  676. 0xC2, 0xC3, 0xC3, 0xC4, 0xC5, 0xC5, 0xC6, 0xC7,
  677. 0xC7, 0xC8, 0xC9, 0xCA, 0xCA, 0xCB, 0xCC, 0xCC,
  678. 0xCD, 0xCE, 0xCE, 0xCF, 0xD0, 0xD0, 0xD1, 0xD2,
  679. 0xD2, 0xD3, 0xD4, 0xD4, 0xD5, 0xD6, 0xD6, 0xD7,
  680. 0xD8, 0xD8, 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC,
  681. 0xDD, 0xDE, 0xDE, 0xDF, 0xE0, 0xE0, 0xE1, 0xE2,
  682. 0xE2, 0xE3, 0xE3, 0xE4, 0xE5, 0xE5, 0xE6, 0xE7,
  683. 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEC,
  684. 0xEC, 0xED, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF1,
  685. 0xF1, 0xF2, 0xF2, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5,
  686. 0xF6, 0xF7, 0xF7, 0xF8, 0xF8, 0xF9, 0xFA, 0xFA,
  687. 0xFB, 0xFB, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF
  688. },
  689. { // 1.8
  690. 0x00, 0x0C, 0x11, 0x16, 0x19, 0x1D, 0x20, 0x23,
  691. 0x25, 0x28, 0x2A, 0x2C, 0x2F, 0x31, 0x33, 0x35,
  692. 0x37, 0x39, 0x3A, 0x3C, 0x3E, 0x40, 0x41, 0x43,
  693. 0x45, 0x46, 0x48, 0x49, 0x4B, 0x4C, 0x4E, 0x4F,
  694. 0x50, 0x52, 0x53, 0x55, 0x56, 0x57, 0x59, 0x5A,
  695. 0x5B, 0x5C, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x64,
  696. 0x65, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
  697. 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
  698. 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D,
  699. 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85,
  700. 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8B, 0x8C,
  701. 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x92, 0x93,
  702. 0x94, 0x95, 0x96, 0x97, 0x98, 0x98, 0x99, 0x9A,
  703. 0x9B, 0x9C, 0x9D, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1,
  704. 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA5, 0xA6, 0xA7,
  705. 0xA8, 0xA9, 0xA9, 0xAA, 0xAB, 0xAC, 0xAC, 0xAD,
  706. 0xAE, 0xAF, 0xAF, 0xB0, 0xB1, 0xB2, 0xB2, 0xB3,
  707. 0xB4, 0xB5, 0xB5, 0xB6, 0xB7, 0xB7, 0xB8, 0xB9,
  708. 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBF,
  709. 0xBF, 0xC0, 0xC1, 0xC1, 0xC2, 0xC3, 0xC3, 0xC4,
  710. 0xC5, 0xC6, 0xC6, 0xC7, 0xC8, 0xC8, 0xC9, 0xCA,
  711. 0xCA, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCE, 0xCF,
  712. 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3, 0xD4,
  713. 0xD5, 0xD5, 0xD6, 0xD7, 0xD7, 0xD8, 0xD9, 0xD9,
  714. 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD, 0xDE, 0xDE,
  715. 0xDF, 0xDF, 0xE0, 0xE1, 0xE1, 0xE2, 0xE2, 0xE3,
  716. 0xE4, 0xE4, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8,
  717. 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEC, 0xEC, 0xED,
  718. 0xED, 0xEE, 0xEE, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1,
  719. 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6,
  720. 0xF7, 0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFB,
  721. 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF
  722. },
  723. { // 1.9
  724. 0x00, 0x0E, 0x14, 0x19, 0x1D, 0x20, 0x23, 0x26,
  725. 0x29, 0x2C, 0x2E, 0x31, 0x33, 0x35, 0x37, 0x39,
  726. 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x46, 0x48,
  727. 0x4A, 0x4B, 0x4D, 0x4E, 0x50, 0x51, 0x53, 0x54,
  728. 0x56, 0x57, 0x58, 0x5A, 0x5B, 0x5C, 0x5E, 0x5F,
  729. 0x60, 0x61, 0x63, 0x64, 0x65, 0x66, 0x68, 0x69,
  730. 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x72,
  731. 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
  732. 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82,
  733. 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,
  734. 0x8B, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91,
  735. 0x92, 0x93, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
  736. 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9D, 0x9E,
  737. 0x9F, 0xA0, 0xA1, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
  738. 0xA5, 0xA6, 0xA7, 0xA8, 0xA8, 0xA9, 0xAA, 0xAB,
  739. 0xAB, 0xAC, 0xAD, 0xAE, 0xAE, 0xAF, 0xB0, 0xB1,
  740. 0xB1, 0xB2, 0xB3, 0xB4, 0xB4, 0xB5, 0xB6, 0xB6,
  741. 0xB7, 0xB8, 0xB9, 0xB9, 0xBA, 0xBB, 0xBB, 0xBC,
  742. 0xBD, 0xBD, 0xBE, 0xBF, 0xC0, 0xC0, 0xC1, 0xC2,
  743. 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7,
  744. 0xC8, 0xC8, 0xC9, 0xC9, 0xCA, 0xCB, 0xCB, 0xCC,
  745. 0xCD, 0xCD, 0xCE, 0xCF, 0xCF, 0xD0, 0xD1, 0xD1,
  746. 0xD2, 0xD2, 0xD3, 0xD4, 0xD4, 0xD5, 0xD6, 0xD6,
  747. 0xD7, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB,
  748. 0xDC, 0xDC, 0xDD, 0xDD, 0xDE, 0xDF, 0xDF, 0xE0,
  749. 0xE0, 0xE1, 0xE2, 0xE2, 0xE3, 0xE3, 0xE4, 0xE4,
  750. 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9,
  751. 0xEA, 0xEA, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xEE,
  752. 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF1, 0xF2, 0xF2,
  753. 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6,
  754. 0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB,
  755. 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF
  756. },
  757. { // 2.0
  758. 0x00, 0x10, 0x17, 0x1C, 0x20, 0x24, 0x27, 0x2A,
  759. 0x2D, 0x30, 0x32, 0x35, 0x37, 0x3A, 0x3C, 0x3E,
  760. 0x40, 0x42, 0x44, 0x46, 0x47, 0x49, 0x4B, 0x4D,
  761. 0x4E, 0x50, 0x51, 0x53, 0x54, 0x56, 0x57, 0x59,
  762. 0x5A, 0x5C, 0x5D, 0x5E, 0x60, 0x61, 0x62, 0x64,
  763. 0x65, 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,
  764. 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
  765. 0x77, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  766. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  767. 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
  768. 0x8F, 0x90, 0x91, 0x91, 0x92, 0x93, 0x94, 0x95,
  769. 0x96, 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
  770. 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2,
  771. 0xA3, 0xA4, 0xA4, 0xA5, 0xA6, 0xA7, 0xA7, 0xA8,
  772. 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE,
  773. 0xAF, 0xB0, 0xB0, 0xB1, 0xB2, 0xB3, 0xB3, 0xB4,
  774. 0xB5, 0xB5, 0xB6, 0xB7, 0xB7, 0xB8, 0xB9, 0xBA,
  775. 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBE, 0xBF,
  776. 0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4,
  777. 0xC5, 0xC6, 0xC6, 0xC7, 0xC7, 0xC8, 0xC9, 0xC9,
  778. 0xCA, 0xCB, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCE,
  779. 0xCF, 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3,
  780. 0xD4, 0xD4, 0xD5, 0xD6, 0xD6, 0xD7, 0xD7, 0xD8,
  781. 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD,
  782. 0xDD, 0xDE, 0xDE, 0xDF, 0xE0, 0xE0, 0xE1, 0xE1,
  783. 0xE2, 0xE2, 0xE3, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6,
  784. 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA,
  785. 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE,
  786. 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3,
  787. 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7,
  788. 0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB,
  789. 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF
  790. },
  791. { // 2.1
  792. 0x00, 0x12, 0x19, 0x1F, 0x23, 0x27, 0x2B, 0x2E,
  793. 0x31, 0x34, 0x37, 0x39, 0x3B, 0x3E, 0x40, 0x42,
  794. 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x4F, 0x51,
  795. 0x53, 0x54, 0x56, 0x58, 0x59, 0x5B, 0x5C, 0x5D,
  796. 0x5F, 0x60, 0x62, 0x63, 0x64, 0x66, 0x67, 0x68,
  797. 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x72,
  798. 0x73, 0x74, 0x75, 0x76, 0x78, 0x79, 0x7A, 0x7B,
  799. 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83,
  800. 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
  801. 0x8C, 0x8D, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92,
  802. 0x93, 0x94, 0x95, 0x95, 0x96, 0x97, 0x98, 0x99,
  803. 0x9A, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x9F,
  804. 0xA0, 0xA1, 0xA2, 0xA3, 0xA3, 0xA4, 0xA5, 0xA6,
  805. 0xA6, 0xA7, 0xA8, 0xA9, 0xA9, 0xAA, 0xAB, 0xAC,
  806. 0xAC, 0xAD, 0xAE, 0xAF, 0xAF, 0xB0, 0xB1, 0xB1,
  807. 0xB2, 0xB3, 0xB4, 0xB4, 0xB5, 0xB6, 0xB6, 0xB7,
  808. 0xB8, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC,
  809. 0xBD, 0xBE, 0xBE, 0xBF, 0xC0, 0xC0, 0xC1, 0xC2,
  810. 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC5, 0xC6, 0xC7,
  811. 0xC7, 0xC8, 0xC9, 0xC9, 0xCA, 0xCA, 0xCB, 0xCC,
  812. 0xCC, 0xCD, 0xCD, 0xCE, 0xCF, 0xCF, 0xD0, 0xD0,
  813. 0xD1, 0xD2, 0xD2, 0xD3, 0xD3, 0xD4, 0xD5, 0xD5,
  814. 0xD6, 0xD6, 0xD7, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA,
  815. 0xDA, 0xDB, 0xDB, 0xDC, 0xDD, 0xDD, 0xDE, 0xDE,
  816. 0xDF, 0xDF, 0xE0, 0xE0, 0xE1, 0xE2, 0xE2, 0xE3,
  817. 0xE3, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7,
  818. 0xE7, 0xE8, 0xE8, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB,
  819. 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE, 0xEF, 0xEF,
  820. 0xF0, 0xF0, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3,
  821. 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7, 0xF7,
  822. 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB,
  823. 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF, 0xFF
  824. },
  825. { // 2.2
  826. 0x00, 0x15, 0x1C, 0x22, 0x27, 0x2B, 0x2E, 0x32,
  827. 0x35, 0x38, 0x3B, 0x3D, 0x40, 0x42, 0x44, 0x46,
  828. 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x55,
  829. 0x57, 0x59, 0x5A, 0x5C, 0x5D, 0x5F, 0x60, 0x62,
  830. 0x63, 0x65, 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6D,
  831. 0x6E, 0x6F, 0x70, 0x72, 0x73, 0x74, 0x75, 0x76,
  832. 0x77, 0x78, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  833. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  834. 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  835. 0x90, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
  836. 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9C,
  837. 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3,
  838. 0xA4, 0xA4, 0xA5, 0xA6, 0xA7, 0xA7, 0xA8, 0xA9,
  839. 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE, 0xAF,
  840. 0xAF, 0xB0, 0xB1, 0xB2, 0xB2, 0xB3, 0xB4, 0xB4,
  841. 0xB5, 0xB6, 0xB6, 0xB7, 0xB8, 0xB8, 0xB9, 0xBA,
  842. 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBE, 0xBF,
  843. 0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC3, 0xC4,
  844. 0xC5, 0xC5, 0xC6, 0xC7, 0xC7, 0xC8, 0xC8, 0xC9,
  845. 0xCA, 0xCA, 0xCB, 0xCB, 0xCC, 0xCD, 0xCD, 0xCE,
  846. 0xCE, 0xCF, 0xCF, 0xD0, 0xD1, 0xD1, 0xD2, 0xD2,
  847. 0xD3, 0xD4, 0xD4, 0xD5, 0xD5, 0xD6, 0xD6, 0xD7,
  848. 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDB,
  849. 0xDC, 0xDC, 0xDD, 0xDD, 0xDE, 0xDF, 0xDF, 0xE0,
  850. 0xE0, 0xE1, 0xE1, 0xE2, 0xE2, 0xE3, 0xE3, 0xE4,
  851. 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8,
  852. 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEC,
  853. 0xEC, 0xED, 0xED, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0,
  854. 0xF0, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4,
  855. 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7, 0xF7, 0xF8,
  856. 0xF8, 0xF9, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB,
  857. 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF, 0xFF
  858. }
  859. };
  860. // The codebook: 115 entries stored as sequential triples of unsigned char
  861. static const F_RGB gaOutTableRGB[CT_LOOKUP] = {
  862. 0,0,0,0,
  863. 0,0,1,0,
  864. 0,0,2,0,
  865. 0,1,1,0,
  866. 0,1,2,0,
  867. 0,1,3,0,
  868. 0,2,2,0,
  869. 0,2,3,0,
  870. 0,2,4,0,
  871. 1,0,0,0,
  872. 1,0,1,0,
  873. 1,0,2,0,
  874. 1,1,0,0,
  875. 1,1,1,0,
  876. 1,1,2,0,
  877. 1,1,3,0,
  878. 1,2,1,0,
  879. 1,2,2,0,
  880. 1,2,3,0,
  881. 1,2,4,0,
  882. 1,3,2,0,
  883. 1,3,3,0,
  884. 1,3,4,0,
  885. 1,3,5,0,
  886. 2,0,0,0,
  887. 2,0,1,0,
  888. 2,0,2,0,
  889. 2,1,0,0,
  890. 2,1,1,0,
  891. 2,1,2,0,
  892. 2,1,3,0,
  893. 2,2,0,0,
  894. 2,2,1,0,
  895. 2,2,2,0,
  896. 2,2,3,0,
  897. 2,2,4,0,
  898. 2,3,1,0,
  899. 2,3,2,0,
  900. 2,3,3,0,
  901. 2,3,4,0,
  902. 2,3,5,0,
  903. 2,4,2,0,
  904. 2,4,3,0,
  905. 2,4,4,0,
  906. 2,4,5,0,
  907. 2,4,6,0,
  908. 3,1,0,0,
  909. 3,1,1,0,
  910. 3,1,2,0,
  911. 3,1,3,0,
  912. 3,2,0,0,
  913. 3,2,1,0,
  914. 3,2,2,0,
  915. 3,2,3,0,
  916. 3,2,4,0,
  917. 3,3,1,0,
  918. 3,3,2,0,
  919. 3,3,3,0,
  920. 3,3,4,0,
  921. 3,3,5,0,
  922. 3,4,2,0,
  923. 3,4,3,0,
  924. 3,4,4,0,
  925. 3,4,5,0,
  926. 3,4,6,0,
  927. 3,5,3,0,
  928. 3,5,4,0,
  929. 3,5,5,0,
  930. 3,5,6,0,
  931. 4,2,0,0,
  932. 4,2,1,0,
  933. 4,2,2,0,
  934. 4,2,3,0,
  935. 4,2,4,0,
  936. 4,3,1,0,
  937. 4,3,2,0,
  938. 4,3,3,0,
  939. 4,3,4,0,
  940. 4,3,5,0,
  941. 4,4,2,0,
  942. 4,4,3,0,
  943. 4,4,4,0,
  944. 4,4,5,0,
  945. 4,4,6,0,
  946. 4,5,3,0,
  947. 4,5,4,0,
  948. 4,5,5,0,
  949. 4,5,6,0,
  950. 4,6,4,0,
  951. 4,6,5,0,
  952. 4,6,6,0,
  953. 5,3,1,0,
  954. 5,3,2,0,
  955. 5,3,3,0,
  956. 5,3,4,0,
  957. 5,4,2,0,
  958. 5,4,3,0,
  959. 5,4,4,0,
  960. 5,4,5,0,
  961. 5,5,3,0,
  962. 5,5,4,0,
  963. 5,5,5,0,
  964. 5,5,6,0,
  965. 5,6,4,0,
  966. 5,6,5,0,
  967. 5,6,6,0,
  968. 6,4,2,0,
  969. 6,4,3,0,
  970. 6,4,4,0,
  971. 6,5,3,0,
  972. 6,5,4,0,
  973. 6,5,5,0,
  974. 6,6,4,0,
  975. 6,6,5,0,
  976. 6,6,6,0
  977. };
  978. static const F_RGB gaOutTableBGR[CT_LOOKUP] = {
  979. 0,0,0,0,
  980. 1,0,0,0,
  981. 2,0,0,0,
  982. 1,1,0,0,
  983. 2,1,0,0,
  984. 3,1,0,0,
  985. 2,2,0,0,
  986. 3,2,0,0,
  987. 4,2,0,0,
  988. 0,0,1,0,
  989. 1,0,1,0,
  990. 2,0,1,0,
  991. 0,1,1,0,
  992. 1,1,1,0,
  993. 2,1,1,0,
  994. 3,1,1,0,
  995. 1,2,1,0,
  996. 2,2,1,0,
  997. 3,2,1,0,
  998. 4,2,1,0,
  999. 2,3,1,0,
  1000. 3,3,1,0,
  1001. 4,3,1,0,
  1002. 5,3,1,0,
  1003. 0,0,2,0,
  1004. 1,0,2,0,
  1005. 2,0,2,0,
  1006. 0,1,2,0,
  1007. 1,1,2,0,
  1008. 2,1,2,0,
  1009. 3,1,2,0,
  1010. 0,2,2,0,
  1011. 1,2,2,0,
  1012. 2,2,2,0,
  1013. 3,2,2,0,
  1014. 4,2,2,0,
  1015. 1,3,2,0,
  1016. 2,3,2,0,
  1017. 3,3,2,0,
  1018. 4,3,2,0,
  1019. 5,3,2,0,
  1020. 2,4,2,0,
  1021. 3,4,2,0,
  1022. 4,4,2,0,
  1023. 5,4,2,0,
  1024. 6,4,2,0,
  1025. 0,1,3,0,
  1026. 1,1,3,0,
  1027. 2,1,3,0,
  1028. 3,1,3,0,
  1029. 0,2,3,0,
  1030. 1,2,3,0,
  1031. 2,2,3,0,
  1032. 3,2,3,0,
  1033. 4,2,3,0,
  1034. 1,3,3,0,
  1035. 2,3,3,0,
  1036. 3,3,3,0,
  1037. 4,3,3,0,
  1038. 5,3,3,0,
  1039. 2,4,3,0,
  1040. 3,4,3,0,
  1041. 4,4,3,0,
  1042. 5,4,3,0,
  1043. 6,4,3,0,
  1044. 3,5,3,0,
  1045. 4,5,3,0,
  1046. 5,5,3,0,
  1047. 6,5,3,0,
  1048. 0,2,4,0,
  1049. 1,2,4,0,
  1050. 2,2,4,0,
  1051. 3,2,4,0,
  1052. 4,2,4,0,
  1053. 1,3,4,0,
  1054. 2,3,4,0,
  1055. 3,3,4,0,
  1056. 4,3,4,0,
  1057. 5,3,4,0,
  1058. 2,4,4,0,
  1059. 3,4,4,0,
  1060. 4,4,4,0,
  1061. 5,4,4,0,
  1062. 6,4,4,0,
  1063. 3,5,4,0,
  1064. 4,5,4,0,
  1065. 5,5,4,0,
  1066. 6,5,4,0,
  1067. 4,6,4,0,
  1068. 5,6,4,0,
  1069. 6,6,4,0,
  1070. 1,3,5,0,
  1071. 2,3,5,0,
  1072. 3,3,5,0,
  1073. 4,3,5,0,
  1074. 2,4,5,0,
  1075. 3,4,5,0,
  1076. 4,4,5,0,
  1077. 5,4,5,0,
  1078. 3,5,5,0,
  1079. 4,5,5,0,
  1080. 5,5,5,0,
  1081. 6,5,5,0,
  1082. 4,6,5,0,
  1083. 5,6,5,0,
  1084. 6,6,5,0,
  1085. 2,4,6,0,
  1086. 3,4,6,0,
  1087. 4,4,6,0,
  1088. 3,5,6,0,
  1089. 4,5,6,0,
  1090. 5,5,6,0,
  1091. 4,6,6,0,
  1092. 5,6,6,0,
  1093. 6,6,6,0
  1094. };
  1095. const F_RGB * gaOutTable = gaOutTableRGB;
  1096. const BYTE FilteredCTLut[7*7*7] =
  1097. {
  1098. 0x00,0x01,0x02,0x02,0x05,0x05,0x08,0x00,0x03,0x04,0x05,0x05,0x08,0x08,0x03,0x03,
  1099. 0x06,0x07,0x08,0x08,0x17,0x10,0x06,0x06,0x07,0x08,0x17,0x17,0x10,0x14,0x14,0x15,
  1100. 0x16,0x17,0x17,0x14,0x14,0x14,0x15,0x16,0x17,0x2d,0x29,0x29,0x29,0x2a,0x2b,0x2c,
  1101. 0x2d,0x09,0x0a,0x0b,0x0b,0x0f,0x0f,0x13,0x0c,0x0d,0x0e,0x0f,0x0f,0x13,0x13,0x0c,
  1102. 0x10,0x11,0x12,0x13,0x13,0x17,0x10,0x10,0x14,0x15,0x16,0x17,0x17,0x24,0x14,0x14,
  1103. 0x15,0x16,0x17,0x2d,0x24,0x29,0x29,0x2a,0x2b,0x2c,0x2d,0x29,0x29,0x29,0x2a,0x2b,
  1104. 0x2c,0x2d,0x18,0x19,0x1a,0x1a,0x1e,0x1e,0x23,0x1b,0x1c,0x1d,0x1e,0x1e,0x23,0x23,
  1105. 0x1f,0x20,0x21,0x22,0x23,0x23,0x28,0x1f,0x24,0x25,0x26,0x27,0x28,0x28,0x24,0x24,
  1106. 0x29,0x2a,0x2b,0x2c,0x2d,0x24,0x29,0x29,0x2a,0x2b,0x2c,0x2d,0x29,0x29,0x41,0x41,
  1107. 0x42,0x43,0x44,0x18,0x19,0x1a,0x31,0x31,0x31,0x36,0x2e,0x2f,0x30,0x31,0x31,0x36,
  1108. 0x36,0x32,0x33,0x34,0x35,0x36,0x36,0x3b,0x32,0x37,0x38,0x39,0x3a,0x3b,0x3b,0x37,
  1109. 0x37,0x3c,0x3d,0x3e,0x3f,0x40,0x37,0x3c,0x3c,0x41,0x42,0x43,0x44,0x3c,0x3c,0x41,
  1110. 0x41,0x42,0x43,0x44,0x2e,0x2f,0x30,0x31,0x31,0x49,0x49,0x2e,0x2f,0x30,0x31,0x49,
  1111. 0x49,0x49,0x45,0x46,0x47,0x48,0x49,0x49,0x4e,0x45,0x4a,0x4b,0x4c,0x4d,0x4e,0x4e,
  1112. 0x4a,0x4a,0x4f,0x50,0x51,0x52,0x53,0x4a,0x4f,0x4f,0x54,0x55,0x56,0x57,0x4f,0x4f,
  1113. 0x54,0x54,0x58,0x59,0x5a,0x2e,0x2f,0x30,0x31,0x49,0x49,0x49,0x45,0x46,0x47,0x48,
  1114. 0x49,0x49,0x49,0x45,0x46,0x47,0x48,0x49,0x49,0x4e,0x5b,0x5b,0x5c,0x5d,0x5e,0x4e,
  1115. 0x4e,0x5b,0x5b,0x5f,0x60,0x61,0x62,0x53,0x5b,0x5f,0x5f,0x63,0x64,0x65,0x66,0x5f,
  1116. 0x5f,0x63,0x63,0x67,0x68,0x69,0x45,0x46,0x47,0x48,0x49,0x49,0x49,0x45,0x46,0x47,
  1117. 0x48,0x49,0x49,0x49,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x4e,0x5b,0x5b,0x5c,0x5d,0x5e,
  1118. 0x5e,0x62,0x5b,0x6a,0x6a,0x6b,0x6c,0x62,0x62,0x6a,0x6a,0x6a,0x6d,0x6e,0x6f,0x66,
  1119. 0x6a,0x6a,0x6d,0x6d,0x70,0x71,0x72};
  1120. } // namespace Globals
  1121. // The encoding lookup table. There are 3^5 possible entries corresponding to
  1122. // 5 emmiters: BP, RT, GT, BT, RN
  1123. const BYTE gajStorageTable[CT_STORAGE] = {
  1124. 0, 1, 2, 3, 4, 5, 6, 7, 8,
  1125. 13, 14, 15, 17, 18, 19, 21, 22, 23,
  1126. 33, 34, 35, 38, 39, 40, 43, 44, 45,
  1127. 12, 13, 14, 16, 17, 18, 20, 21, 22,
  1128. 32, 33, 34, 37, 38, 39, 42, 43, 44,
  1129. 56, 57, 58, 61, 62, 63, 66, 67, 68,
  1130. 31, 32, 33, 36, 37, 38, 41, 42, 43,
  1131. 55, 56, 57, 60, 61, 62, 65, 66, 67,
  1132. 79, 80, 81, 84, 85, 86, 88, 89, 90,
  1133. 9, 10, 11, 13, 14, 15, 17, 18, 19,
  1134. 28, 29, 30, 33, 34, 35, 38, 39, 40,
  1135. 52, 53, 54, 57, 58, 59, 62, 63, 64,
  1136. 27, 28, 29, 32, 33, 34, 37, 38, 39,
  1137. 51, 52, 53, 56, 57, 58, 61, 62, 63,
  1138. 75, 76, 77, 80, 81, 82, 85, 86, 87,
  1139. 50, 51, 52, 55, 56, 57, 60, 61, 62,
  1140. 74, 75, 76, 79, 80, 81, 84, 85, 86,
  1141. 95, 96, 97, 99,100,101,103,104,105,
  1142. 24, 25, 26, 28, 29, 30, 33, 34, 35,
  1143. 47, 48, 49, 52, 53, 54, 57, 58, 59,
  1144. 71, 72, 73, 76, 77, 78, 81, 82, 83,
  1145. 46, 47, 48, 51, 52, 53, 56, 57, 58,
  1146. 70, 71, 72, 75, 76, 77, 80, 81, 82,
  1147. 92, 93, 94, 96, 97, 98,100,101,102,
  1148. 69, 70, 71, 74, 75, 76, 79, 80, 81,
  1149. 91, 92, 93, 95, 96, 97, 99,100,101,
  1150. 106,107,108,109,110,111,112,113,114
  1151. };
  1152. const BYTE gajStorageTableBloated[CT_STORAGE] = {
  1153. 0, 2, 5, 6, 8, 8, 22, 23, 23,
  1154. 33, 35, 40, 43, 45, 45, 44, 45, 45,
  1155. 61, 63, 63, 66, 68, 68, 67, 68, 68,
  1156. 31, 33, 38, 41, 43, 43, 66, 67, 67,
  1157. 79, 81, 86, 88, 90, 90, 89, 90, 90,
  1158. 84, 86, 86, 88, 90, 90, 89, 90, 90,
  1159. 74, 76, 81, 84, 86, 86, 85, 86, 86,
  1160. 95, 97,101,103,105,105,104,105,105,
  1161. 99,101,101,103,105,105,104,105,105,
  1162. 24, 26, 30, 33, 35, 35, 58, 59, 59,
  1163. 71, 73, 78, 81, 83, 83, 82, 83, 83,
  1164. 96, 98, 98,100,102,102,101,102,102,
  1165. 69, 71, 76, 79, 81, 81,100,101,101,
  1166. 106,108,111,112,114,114,113,114,114,
  1167. 109,111,111,112,114,114,113,114,114,
  1168. 91, 93, 97, 99,101,101,100,101,101,
  1169. 106,108,111,112,114,114,113,114,114,
  1170. 109,111,111,112,114,114,113,114,114,
  1171. 46, 48, 53, 56, 58, 58, 81, 82, 82,
  1172. 92, 94, 98,100,102,102,101,102,102,
  1173. 96, 98, 98,100,102,102,101,102,102,
  1174. 69, 71, 76, 79, 81, 81,100,101,101,
  1175. 106,108,111,112,114,114,113,114,114,
  1176. 109,111,111,112,114,114,113,114,114,
  1177. 91, 93, 97, 99,101,101,100,101,101,
  1178. 106,108,111,112,114,114,113,114,114,
  1179. 109,111,111,112,114,114,113,114,114
  1180. };
  1181. // rasterizer returns unfiltered data in 2,2,2 format for r,g,b
  1182. #define GETRED(j) (((j) >> 4) & 3)
  1183. #define GETGRE(j) (((j) >> 2) & 3)
  1184. #define GETBLU(j) (((j) >> 0) & 3)
  1185. #define R_SET(j) ((j) & 0X30)
  1186. #define B_SET(j) ((j) & 0X03)
  1187. #define FL_LEFT_LEAK 1
  1188. #define FL_RIGHT_LEAK 2
  1189. // because of the color filtering we may need to expand the original bitmap
  1190. // by one column of zero pixels on the left and on the right.
  1191. // After we perform the color filtering the column of left edge will pick up
  1192. // a non-trivial Blue component (color "leak" from the leftmost pixel in the
  1193. // original bitmap) while the column on the right edge will pick up the
  1194. // nontrivial Red component from the "leakage" of the rightmost pixel in the
  1195. // original bitmap. [BodinD]
  1196. ULONG ulClearTypeFilter(GLYPHBITS *pgb, ULONG cjBits, CacheFaceRealization *prface)
  1197. {
  1198. const ULONG cx = pgb->sizlBitmap.cx;
  1199. const ULONG cy = pgb->sizlBitmap.cy;
  1200. const BYTE * pCurrentStorageTable = gajStorageTable;
  1201. if (prface->Face->pifi->flInfo & (FM_INFO_CONSTANT_WIDTH | FM_INFO_OPTICALLY_FIXED_PITCH) /* the font is fixed pitch */
  1202. /* we need find some way for horizontal transform */
  1203. && (prface->Face->pifi->usWinWeight <= FW_NORMAL) /* normal or thin weight */
  1204. && (!UnicodeStringCompareCI((PWSTR)((BYTE*)prface->Face->pifi + prface->Face->pifi->dpwszFamilyName),L"Courier New")
  1205. || !UnicodeStringCompareCI((PWSTR)((BYTE*)prface->Face->pifi + prface->Face->pifi->dpwszFamilyName),L"Rod")
  1206. || !UnicodeStringCompareCI((PWSTR)((BYTE*)prface->Face->pifi + prface->Face->pifi->dpwszFamilyName),L"Rod Transparent")
  1207. || !UnicodeStringCompareCI((PWSTR)((BYTE*)prface->Face->pifi + prface->Face->pifi->dpwszFamilyName),L"Fixed Miriam Transparent")
  1208. || !UnicodeStringCompareCI((PWSTR)((BYTE*)prface->Face->pifi + prface->Face->pifi->dpwszFamilyName),L"Miriam Fixed")
  1209. || !UnicodeStringCompareCI((PWSTR)((BYTE*)prface->Face->pifi + prface->Face->pifi->dpwszFamilyName),L"Simplified Arabic Fixed")
  1210. )
  1211. )
  1212. {
  1213. /* Courier New look too thin with ClearType standard filter, let's use a bloated filter : */
  1214. pCurrentStorageTable = gajStorageTableBloated;
  1215. }
  1216. FLONG flCTBits = 0;
  1217. ULONG cyT = cy;
  1218. for (BYTE *pjScan = pgb->aj; cyT; cyT--, pjScan += cx)
  1219. {
  1220. if (R_SET(pjScan[0]))
  1221. flCTBits |= FL_LEFT_LEAK;
  1222. if (B_SET(pjScan[cx - 1]))
  1223. flCTBits |= FL_RIGHT_LEAK;
  1224. if ((flCTBits & (FL_LEFT_LEAK | FL_RIGHT_LEAK)) == (FL_LEFT_LEAK | FL_RIGHT_LEAK))
  1225. break;
  1226. }
  1227. // we need to copy and filter in the same pass for performance reasons,
  1228. // we traverse the source backwards, so that we do not overwrite it
  1229. ULONG cxD = cx;
  1230. if (flCTBits & FL_LEFT_LEAK)
  1231. cxD += 1;
  1232. if (flCTBits & FL_RIGHT_LEAK)
  1233. cxD += 1;
  1234. BYTE jP, jT, jN;
  1235. ULONG kBP; // unfiltered blue count from the previous pixel
  1236. ULONG kRN; // unfiltered red count from the next pixel
  1237. ULONG kRT, kGT, kBT; // unfiltered counts from this pixel
  1238. BYTE * pjSrcScanEnd = pgb->aj + (cx * cy) - 1;
  1239. BYTE * pjDstScanEnd = pgb->aj + (cxD * cy) - 1;
  1240. for ( ; pjDstScanEnd > pgb->aj; pjDstScanEnd -= cxD, pjSrcScanEnd -= cx)
  1241. {
  1242. BYTE *pjD1, *pjS1, *pjS0;
  1243. pjD1 = pjDstScanEnd;
  1244. pjS1 = pjSrcScanEnd;
  1245. pjS0 = pjS1 - cx;
  1246. // for the right border pixel jN = 0; jT = 0; jP = *pjS1;
  1247. // therefore:
  1248. //
  1249. // kBP = GETBLU(*pjS1); // GETBLU(jP);
  1250. // kRN = 0; // GETRED(jN);
  1251. // kRT = 0; // GETRED(jT);
  1252. // kGT = 0; // GETGRE(jT);
  1253. // kBT = 0; // GETBLU(jT);
  1254. //
  1255. // now convert this to a filtered index in the lookup table range
  1256. // this is the trick, filtering and storing is done in one step
  1257. // iStorage = kRN + 3 * (kBT + 3 * (kGT + 3 * (kRT + 3 * kBP)));
  1258. if (flCTBits & FL_RIGHT_LEAK)
  1259. {
  1260. *pjD1-- = pCurrentStorageTable[3 * 3 * 3 * 3 * GETBLU(*pjS1)];
  1261. }
  1262. // initialize the loop in the middle
  1263. for (jN = 0, jT = *pjS1; pjS1 > pjS0; pjS1--, pjD1--, jN = jT, jT = jP)
  1264. {
  1265. jP = (pjS1 == &pjS0[1]) ? 0 : pjS1[-1];
  1266. kBP = GETBLU(jP);
  1267. kRN = GETRED(jN);
  1268. if (kBP || jT || kRN) // must compute, else optimize
  1269. {
  1270. kRT = GETRED(jT);
  1271. kGT = GETGRE(jT);
  1272. kBT = GETBLU(jT);
  1273. // now convert this to a filtered index in the lookup table range
  1274. // this is the trick, filtering and storing is done in one step
  1275. ULONG iStorage = kRN + 3 * (kBT + 3 * (kGT + 3 * (kRT + 3 * kBP)));
  1276. *pjD1 = pCurrentStorageTable[iStorage];
  1277. }
  1278. else
  1279. {
  1280. *pjD1 = 0;
  1281. }
  1282. }
  1283. // for the left border pixel jP = 0; jT = 0; jN = pjS0[1];
  1284. // therefore:
  1285. //
  1286. // kBP = 0; // GETBLU(jP);
  1287. // kRN = GETRED(pjS0[1]); // GETRED(jN);
  1288. // kRT = 0; // GETRED(jT);
  1289. // kGT = 0; // GETGRE(jT);
  1290. // kBT = 0; // GETBLU(jT);
  1291. //
  1292. // now convert this to a filtered index in the lookup table range
  1293. // this is the trick, filtering and storing is done in one step
  1294. // iStorage = kRN + 3 * (kBT + 3 * (kGT + 3 * (kRT + 3 * kBP)));
  1295. // i.e. iStorage = kRN, which implies:
  1296. if (flCTBits & FL_LEFT_LEAK)
  1297. {
  1298. *pjD1 = pCurrentStorageTable[ GETRED(pjS0[1]) ];
  1299. }
  1300. }
  1301. // fix the size and the origin
  1302. pgb->sizlBitmap.cx = cxD;
  1303. if (flCTBits & FL_LEFT_LEAK)
  1304. {
  1305. pgb->ptlUprightOrigin.x -= 1;
  1306. pgb->ptlSidewaysOrigin.x -= 1;
  1307. }
  1308. return CJ_CTGD(cxD, cy);
  1309. }
  1310. void TextColorGammaTable::CreateTextColorGammaTable(const GpColor * color, ULONG value, ULONG gsLevel)
  1311. {
  1312. gammaValue = value;
  1313. if (color)
  1314. {
  1315. ULONG i;
  1316. ULONG k = gsLevel - 1;
  1317. if (gammaValue)
  1318. {
  1319. ULONG k = gammaValue - 1;
  1320. for (i = 0; i < gsLevel; i++)
  1321. {
  1322. ULONG j;
  1323. j = (ULONG) 255-(((ULONG) 255 * (ULONG) i) / (gsLevel - 1));
  1324. argb[i] = color->PremultiplyWithCoverage(color->GetValue(), 255 - Globals::TextContrastTablesInv[k][j]);
  1325. }
  1326. }
  1327. else
  1328. {
  1329. for (i = 0; i < gsLevel; i++)
  1330. {
  1331. ULONG j;
  1332. argb[i] = color->PremultiplyWithCoverage(color->GetValue(), (BYTE)((255 * i) / (gsLevel - 1)));
  1333. }
  1334. }
  1335. }
  1336. }
  1337. BYTE TextColorGammaTable::GetGammaTableIndexValue(BYTE grayscaleValue, ULONG gsLevel)
  1338. {
  1339. if (gammaValue)
  1340. {
  1341. ULONG k = gammaValue - 1;
  1342. ULONG j;
  1343. j = (ULONG) 255-(((ULONG) 255 * (ULONG) grayscaleValue) / (gsLevel - 1));
  1344. return ((BYTE)255 - Globals::TextContrastTablesInv[k][j]);
  1345. }
  1346. else
  1347. {
  1348. return (BYTE)(((ULONG) 255 * (ULONG) grayscaleValue) / (gsLevel - 1));
  1349. }
  1350. }
  1351. DpOutputAntiAliasSolidColorSpan::DpOutputAntiAliasSolidColorSpan(GpColor &color, DpScanBuffer * scan, ULONG gammaValue, ULONG gsLevel)
  1352. : DpOutputSolidColorSpan( 0, scan)
  1353. {
  1354. textColorGammaTable.CreateTextColorGammaTable(&color, gammaValue, gsLevel);
  1355. }
  1356. GpStatus DpOutputAntiAliasBrushOutputSpan::OutputSpan(INT y, INT xMin, INT xMax)
  1357. {
  1358. Output->OutputSpan(y, xMin, xMax);
  1359. ARGB *buffer;
  1360. buffer = Output->GetScanBuffer()->GetCurrentBuffer();
  1361. for (INT j = xMin; j < xMax; j++)
  1362. {
  1363. *buffer++ = GpColor::MultiplyCoverage(*buffer, alphaCoverage);
  1364. }
  1365. return Ok;
  1366. }
  1367. void UpdateLCDOrientation()
  1368. {
  1369. DWORD dwOrientation = FE_FONTSMOOTHINGORIENTATIONRGB;
  1370. BOOL ret = SystemParametersInfoA(SPI_GETFONTSMOOTHINGORIENTATION, 0, &dwOrientation, 0);
  1371. if (!ret)
  1372. dwOrientation = FE_FONTSMOOTHINGORIENTATIONRGB;
  1373. if ((dwOrientation & FE_FONTSMOOTHINGORIENTATIONRGB) != 0)
  1374. {
  1375. Globals::gaOutTable = Globals::gaOutTableRGB;
  1376. }
  1377. else
  1378. {
  1379. Globals::gaOutTable = Globals::gaOutTableBGR;
  1380. }
  1381. }