1/* Binary Coded Decimal <--> Densely Packed Decimal lookup tables.
2   Copyright (C) 2005 Free Software Foundation, Inc.
3   Contributed by IBM Corporation.  Author Mike Cowlishaw.
4
5   This file is part of GCC.
6
7   GCC is free software; you can redistribute it and/or modify it under
8   the terms of the GNU General Public License as published by the Free
9   Software Foundation; either version 2, or (at your option) any later
10   version.
11
12   In addition to the permissions in the GNU General Public License,
13   the Free Software Foundation gives you unlimited permission to link
14   the compiled version of this file into combinations with other
15   programs, and to distribute those combinations without any
16   restriction coming from the use of this file.  (The General Public
17   License restrictions do apply in other respects; for example, they
18   cover modification of the file, and distribution when not linked
19   into a combine executable.)
20
21   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
22   WARRANTY; without even the implied warranty of MERCHANTABILITY or
23   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
24   for more details.
25
26   You should have received a copy of the GNU General Public License
27   along with GCC; see the file COPYING.  If not, write to the Free
28   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
29   02110-1301, USA.  */
30
31/* ------------------------------------------------------------------------ */
32/* For details, see: http://www2.hursley.ibm.com/decimal/DPDecimal.html     */
33/*                                                                          */
34/* This include file defines conversion tables for DPD, as follows.         */
35/*                                                                          */
36/*   uint16_t BCD2DPD[2458];     // BCD -> DPD (0x999 => 2457)              */
37/*   uint16_t DPD2BCD[1024];     // DPD -> BCD (0x3FF => 0x999)             */
38/*   uint16_t BIN2DPD[1000];     // BIN -> DPD (999 => 2457)                */
39/*   uint16_t DPD2BIN[1024];     // DPD -> BIN (0x3FF => 999)               */
40/*                                                                          */
41/* In all cases the result (10 bits or 12 bits, or binary) is right-aligned */
42/* in the table entry.                                                      */
43/*                                                                          */
44/* To use a table, its name, prefixed with DEC_, must be defined with a     */
45/* value of 1 before this header file is included.  For example:            */
46/*    #define DEC_BCD2DPD 1                                                 */
47/* ------------------------------------------------------------------------ */
48
49#if DEC_BCD2DPD==1
50
51const uint16_t BCD2DPD[2458] = { 0, 1, 2, 3, 4, 5, 6, 7,
52  8, 9, 0, 0, 0, 0, 0, 0, 16, 17, 18, 19, 20,
53  21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 32, 33,
54  34, 35, 36, 37, 38, 39, 40, 41, 0, 0, 0, 0, 0,
55  0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, 0,
56  0, 0, 0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72,
57  73, 0, 0, 0, 0, 0, 0, 80, 81, 82, 83, 84, 85,
58  86, 87, 88, 89, 0, 0, 0, 0, 0, 0, 96, 97, 98,
59  99, 100, 101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 0,
60  112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 0, 0, 0,
61  0, 0, 0, 10, 11, 42, 43, 74, 75, 106, 107, 78, 79,
62  0, 0, 0, 0, 0, 0, 26, 27, 58, 59, 90, 91, 122,
63  123, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68  0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 42, 43, 74,
69  75, 106, 107, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
70  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
71  0, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0,
72  0, 0, 0, 0, 144, 145, 146, 147, 148, 149, 150, 151, 152,
73  153, 0, 0, 0, 0, 0, 0, 160, 161, 162, 163, 164, 165,
74  166, 167, 168, 169, 0, 0, 0, 0, 0, 0, 176, 177, 178,
75  179, 180, 181, 182, 183, 184, 185, 0, 0, 0, 0, 0, 0,
76  192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 0, 0, 0,
77  0, 0, 0, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
78  0, 0, 0, 0, 0, 0, 224, 225, 226, 227, 228, 229, 230,
79  231, 232, 233, 0, 0, 0, 0, 0, 0, 240, 241, 242, 243,
80  244, 245, 246, 247, 248, 249, 0, 0, 0, 0, 0, 0, 138,
81  139, 170, 171, 202, 203, 234, 235, 206, 207, 0, 0, 0, 0,
82  0, 0, 154, 155, 186, 187, 218, 219, 250, 251, 222, 223, 0,
83  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
86  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88  0, 0, 0, 0, 138, 139, 170, 171, 202, 203, 234, 235, 206,
89  207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 258,
91  259, 260, 261, 262, 263, 264, 265, 0, 0, 0, 0, 0, 0,
92  272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 0, 0, 0,
93  0, 0, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
94  0, 0, 0, 0, 0, 0, 304, 305, 306, 307, 308, 309, 310,
95  311, 312, 313, 0, 0, 0, 0, 0, 0, 320, 321, 322, 323,
96  324, 325, 326, 327, 328, 329, 0, 0, 0, 0, 0, 0, 336,
97  337, 338, 339, 340, 341, 342, 343, 344, 345, 0, 0, 0, 0,
98  0, 0, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 0,
99  0, 0, 0, 0, 0, 368, 369, 370, 371, 372, 373, 374, 375,
100  376, 377, 0, 0, 0, 0, 0, 0, 266, 267, 298, 299, 330,
101  331, 362, 363, 334, 335, 0, 0, 0, 0, 0, 0, 282, 283,
102  314, 315, 346, 347, 378, 379, 350, 351, 0, 0, 0, 0, 0,
103  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
105  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
106  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
107  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108  266, 267, 298, 299, 330, 331, 362, 363, 334, 335, 0, 0, 0,
109  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110  0, 0, 0, 0, 0, 0, 384, 385, 386, 387, 388, 389, 390,
111  391, 392, 393, 0, 0, 0, 0, 0, 0, 400, 401, 402, 403,
112  404, 405, 406, 407, 408, 409, 0, 0, 0, 0, 0, 0, 416,
113  417, 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, 0, 0,
114  0, 0, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 0,
115  0, 0, 0, 0, 0, 448, 449, 450, 451, 452, 453, 454, 455,
116  456, 457, 0, 0, 0, 0, 0, 0, 464, 465, 466, 467, 468,
117  469, 470, 471, 472, 473, 0, 0, 0, 0, 0, 0, 480, 481,
118  482, 483, 484, 485, 486, 487, 488, 489, 0, 0, 0, 0, 0,
119  0, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, 0,
120  0, 0, 0, 0, 394, 395, 426, 427, 458, 459, 490, 491, 462,
121  463, 0, 0, 0, 0, 0, 0, 410, 411, 442, 443, 474, 475,
122  506, 507, 478, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0,
123  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
125  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
126  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
127  0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 395, 426, 427,
128  458, 459, 490, 491, 462, 463, 0, 0, 0, 0, 0, 0, 0,
129  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
130  0, 0, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 0,
131  0, 0, 0, 0, 0, 528, 529, 530, 531, 532, 533, 534, 535,
132  536, 537, 0, 0, 0, 0, 0, 0, 544, 545, 546, 547, 548,
133  549, 550, 551, 552, 553, 0, 0, 0, 0, 0, 0, 560, 561,
134  562, 563, 564, 565, 566, 567, 568, 569, 0, 0, 0, 0, 0,
135  0, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 0, 0,
136  0, 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, 600,
137  601, 0, 0, 0, 0, 0, 0, 608, 609, 610, 611, 612, 613,
138  614, 615, 616, 617, 0, 0, 0, 0, 0, 0, 624, 625, 626,
139  627, 628, 629, 630, 631, 632, 633, 0, 0, 0, 0, 0, 0,
140  522, 523, 554, 555, 586, 587, 618, 619, 590, 591, 0, 0, 0,
141  0, 0, 0, 538, 539, 570, 571, 602, 603, 634, 635, 606, 607,
142  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
143  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
144  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
145  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
146  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
147  0, 0, 0, 0, 0, 522, 523, 554, 555, 586, 587, 618, 619,
148  590, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
149  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 641,
150  642, 643, 644, 645, 646, 647, 648, 649, 0, 0, 0, 0, 0,
151  0, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 0, 0,
152  0, 0, 0, 0, 672, 673, 674, 675, 676, 677, 678, 679, 680,
153  681, 0, 0, 0, 0, 0, 0, 688, 689, 690, 691, 692, 693,
154  694, 695, 696, 697, 0, 0, 0, 0, 0, 0, 704, 705, 706,
155  707, 708, 709, 710, 711, 712, 713, 0, 0, 0, 0, 0, 0,
156  720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 0, 0, 0,
157  0, 0, 0, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745,
158  0, 0, 0, 0, 0, 0, 752, 753, 754, 755, 756, 757, 758,
159  759, 760, 761, 0, 0, 0, 0, 0, 0, 650, 651, 682, 683,
160  714, 715, 746, 747, 718, 719, 0, 0, 0, 0, 0, 0, 666,
161  667, 698, 699, 730, 731, 762, 763, 734, 735, 0, 0, 0, 0,
162  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
163  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
164  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
165  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
166  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167  0, 650, 651, 682, 683, 714, 715, 746, 747, 718, 719, 0, 0,
168  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
169  0, 0, 0, 0, 0, 0, 0, 768, 769, 770, 771, 772, 773,
170  774, 775, 776, 777, 0, 0, 0, 0, 0, 0, 784, 785, 786,
171  787, 788, 789, 790, 791, 792, 793, 0, 0, 0, 0, 0, 0,
172  800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 0, 0, 0,
173  0, 0, 0, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825,
174  0, 0, 0, 0, 0, 0, 832, 833, 834, 835, 836, 837, 838,
175  839, 840, 841, 0, 0, 0, 0, 0, 0, 848, 849, 850, 851,
176  852, 853, 854, 855, 856, 857, 0, 0, 0, 0, 0, 0, 864,
177  865, 866, 867, 868, 869, 870, 871, 872, 873, 0, 0, 0, 0,
178  0, 0, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 0,
179  0, 0, 0, 0, 0, 778, 779, 810, 811, 842, 843, 874, 875,
180  846, 847, 0, 0, 0, 0, 0, 0, 794, 795, 826, 827, 858,
181  859, 890, 891, 862, 863, 0, 0, 0, 0, 0, 0, 0, 0,
182  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
183  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
185  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
186  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 779, 810,
187  811, 842, 843, 874, 875, 846, 847, 0, 0, 0, 0, 0, 0,
188  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
189  0, 0, 0, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905,
190  0, 0, 0, 0, 0, 0, 912, 913, 914, 915, 916, 917, 918,
191  919, 920, 921, 0, 0, 0, 0, 0, 0, 928, 929, 930, 931,
192  932, 933, 934, 935, 936, 937, 0, 0, 0, 0, 0, 0, 944,
193  945, 946, 947, 948, 949, 950, 951, 952, 953, 0, 0, 0, 0,
194  0, 0, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 0,
195  0, 0, 0, 0, 0, 976, 977, 978, 979, 980, 981, 982, 983,
196  984, 985, 0, 0, 0, 0, 0, 0, 992, 993, 994, 995, 996,
197  997, 998, 999, 1000, 1001, 0, 0, 0, 0, 0, 0, 1008, 1009,
198  1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 0, 0, 0, 0, 0,
199  0, 906, 907, 938, 939, 970, 971, 1002, 1003, 974, 975, 0, 0,
200  0, 0, 0, 0, 922, 923, 954, 955, 986, 987, 1018, 1019, 990,
201  991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
202  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
203  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
204  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
206  0, 0, 0, 0, 0, 0, 906, 907, 938, 939, 970, 971, 1002,
207  1003, 974, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
209  13, 268, 269, 524, 525, 780, 781, 46, 47, 0, 0, 0, 0,
210  0, 0, 28, 29, 284, 285, 540, 541, 796, 797, 62, 63, 0,
211  0, 0, 0, 0, 0, 44, 45, 300, 301, 556, 557, 812, 813,
212  302, 303, 0, 0, 0, 0, 0, 0, 60, 61, 316, 317, 572,
213  573, 828, 829, 318, 319, 0, 0, 0, 0, 0, 0, 76, 77,
214  332, 333, 588, 589, 844, 845, 558, 559, 0, 0, 0, 0, 0,
215  0, 92, 93, 348, 349, 604, 605, 860, 861, 574, 575, 0, 0,
216  0, 0, 0, 0, 108, 109, 364, 365, 620, 621, 876, 877, 814,
217  815, 0, 0, 0, 0, 0, 0, 124, 125, 380, 381, 636, 637,
218  892, 893, 830, 831, 0, 0, 0, 0, 0, 0, 14, 15, 270,
219  271, 526, 527, 782, 783, 110, 111, 0, 0, 0, 0, 0, 0,
220  30, 31, 286, 287, 542, 543, 798, 799, 126, 127, 0, 0, 0,
221  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
222  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
223  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
224  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
226  0, 0, 14, 15, 270, 271, 526, 527, 782, 783, 110, 111, 0,
227  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
228  0, 0, 0, 0, 0, 0, 0, 0, 140, 141, 396, 397, 652,
229  653, 908, 909, 174, 175, 0, 0, 0, 0, 0, 0, 156, 157,
230  412, 413, 668, 669, 924, 925, 190, 191, 0, 0, 0, 0, 0,
231  0, 172, 173, 428, 429, 684, 685, 940, 941, 430, 431, 0, 0,
232  0, 0, 0, 0, 188, 189, 444, 445, 700, 701, 956, 957, 446,
233  447, 0, 0, 0, 0, 0, 0, 204, 205, 460, 461, 716, 717,
234  972, 973, 686, 687, 0, 0, 0, 0, 0, 0, 220, 221, 476,
235  477, 732, 733, 988, 989, 702, 703, 0, 0, 0, 0, 0, 0,
236  236, 237, 492, 493, 748, 749, 1004, 1005, 942, 943, 0, 0, 0,
237  0, 0, 0, 252, 253, 508, 509, 764, 765, 1020, 1021, 958, 959,
238  0, 0, 0, 0, 0, 0, 142, 143, 398, 399, 654, 655, 910,
239  911, 238, 239, 0, 0, 0, 0, 0, 0, 158, 159, 414, 415,
240  670, 671, 926, 927, 254, 255
241};
242#endif
243
244#if DEC_DPD2BCD==1
245
246const uint16_t DPD2BCD[1024] = { 0, 1, 2, 3, 4, 5, 6, 7,
247  8, 9, 128, 129, 2048, 2049, 2176, 2177, 16, 17, 18, 19, 20,
248  21, 22, 23, 24, 25, 144, 145, 2064, 2065, 2192, 2193, 32, 33,
249  34, 35, 36, 37, 38, 39, 40, 41, 130, 131, 2080, 2081, 2056,
250  2057, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 146, 147,
251  2096, 2097, 2072, 2073, 64, 65, 66, 67, 68, 69, 70, 71, 72,
252  73, 132, 133, 2112, 2113, 136, 137, 80, 81, 82, 83, 84, 85,
253  86, 87, 88, 89, 148, 149, 2128, 2129, 152, 153, 96, 97, 98,
254  99, 100, 101, 102, 103, 104, 105, 134, 135, 2144, 2145, 2184, 2185,
255  112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 150, 151, 2160,
256  2161, 2200, 2201, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
257  384, 385, 2304, 2305, 2432, 2433, 272, 273, 274, 275, 276, 277, 278,
258  279, 280, 281, 400, 401, 2320, 2321, 2448, 2449, 288, 289, 290, 291,
259  292, 293, 294, 295, 296, 297, 386, 387, 2336, 2337, 2312, 2313, 304,
260  305, 306, 307, 308, 309, 310, 311, 312, 313, 402, 403, 2352, 2353,
261  2328, 2329, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 388,
262  389, 2368, 2369, 392, 393, 336, 337, 338, 339, 340, 341, 342, 343,
263  344, 345, 404, 405, 2384, 2385, 408, 409, 352, 353, 354, 355, 356,
264  357, 358, 359, 360, 361, 390, 391, 2400, 2401, 2440, 2441, 368, 369,
265  370, 371, 372, 373, 374, 375, 376, 377, 406, 407, 2416, 2417, 2456,
266  2457, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 640, 641,
267  2050, 2051, 2178, 2179, 528, 529, 530, 531, 532, 533, 534, 535, 536,
268  537, 656, 657, 2066, 2067, 2194, 2195, 544, 545, 546, 547, 548, 549,
269  550, 551, 552, 553, 642, 643, 2082, 2083, 2088, 2089, 560, 561, 562,
270  563, 564, 565, 566, 567, 568, 569, 658, 659, 2098, 2099, 2104, 2105,
271  576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 644, 645, 2114,
272  2115, 648, 649, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601,
273  660, 661, 2130, 2131, 664, 665, 608, 609, 610, 611, 612, 613, 614,
274  615, 616, 617, 646, 647, 2146, 2147, 2184, 2185, 624, 625, 626, 627,
275  628, 629, 630, 631, 632, 633, 662, 663, 2162, 2163, 2200, 2201, 768,
276  769, 770, 771, 772, 773, 774, 775, 776, 777, 896, 897, 2306, 2307,
277  2434, 2435, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 912,
278  913, 2322, 2323, 2450, 2451, 800, 801, 802, 803, 804, 805, 806, 807,
279  808, 809, 898, 899, 2338, 2339, 2344, 2345, 816, 817, 818, 819, 820,
280  821, 822, 823, 824, 825, 914, 915, 2354, 2355, 2360, 2361, 832, 833,
281  834, 835, 836, 837, 838, 839, 840, 841, 900, 901, 2370, 2371, 904,
282  905, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 916, 917,
283  2386, 2387, 920, 921, 864, 865, 866, 867, 868, 869, 870, 871, 872,
284  873, 902, 903, 2402, 2403, 2440, 2441, 880, 881, 882, 883, 884, 885,
285  886, 887, 888, 889, 918, 919, 2418, 2419, 2456, 2457, 1024, 1025, 1026,
286  1027, 1028, 1029, 1030, 1031, 1032, 1033, 1152, 1153, 2052, 2053, 2180,
287    2181,
288  1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1168, 1169,
289    2068,
290  2069, 2196, 2197, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
291    1065,
292  1154, 1155, 2084, 2085, 2120, 2121, 1072, 1073, 1074, 1075, 1076, 1077,
293    1078,
294  1079, 1080, 1081, 1170, 1171, 2100, 2101, 2136, 2137, 1088, 1089, 1090,
295    1091,
296  1092, 1093, 1094, 1095, 1096, 1097, 1156, 1157, 2116, 2117, 1160, 1161,
297    1104,
298  1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1172, 1173, 2132,
299    2133,
300  1176, 1177, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
301    1158,
302  1159, 2148, 2149, 2184, 2185, 1136, 1137, 1138, 1139, 1140, 1141, 1142,
303    1143,
304  1144, 1145, 1174, 1175, 2164, 2165, 2200, 2201, 1280, 1281, 1282, 1283,
305    1284,
306  1285, 1286, 1287, 1288, 1289, 1408, 1409, 2308, 2309, 2436, 2437, 1296,
307    1297,
308  1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1424, 1425, 2324, 2325,
309    2452,
310  2453, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1410,
311    1411,
312  2340, 2341, 2376, 2377, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335,
313    1336,
314  1337, 1426, 1427, 2356, 2357, 2392, 2393, 1344, 1345, 1346, 1347, 1348,
315    1349,
316  1350, 1351, 1352, 1353, 1412, 1413, 2372, 2373, 1416, 1417, 1360, 1361,
317    1362,
318  1363, 1364, 1365, 1366, 1367, 1368, 1369, 1428, 1429, 2388, 2389, 1432,
319    1433,
320  1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1414, 1415,
321    2404,
322  2405, 2440, 2441, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400,
323    1401,
324  1430, 1431, 2420, 2421, 2456, 2457, 1536, 1537, 1538, 1539, 1540, 1541,
325    1542,
326  1543, 1544, 1545, 1664, 1665, 2054, 2055, 2182, 2183, 1552, 1553, 1554,
327    1555,
328  1556, 1557, 1558, 1559, 1560, 1561, 1680, 1681, 2070, 2071, 2198, 2199,
329    1568,
330  1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1666, 1667, 2086,
331    2087,
332  2152, 2153, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593,
333    1682,
334  1683, 2102, 2103, 2168, 2169, 1600, 1601, 1602, 1603, 1604, 1605, 1606,
335    1607,
336  1608, 1609, 1668, 1669, 2118, 2119, 1672, 1673, 1616, 1617, 1618, 1619,
337    1620,
338  1621, 1622, 1623, 1624, 1625, 1684, 1685, 2134, 2135, 1688, 1689, 1632,
339    1633,
340  1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1670, 1671, 2150, 2151,
341    2184,
342  2185, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1686,
343    1687,
344  2166, 2167, 2200, 2201, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799,
345    1800,
346  1801, 1920, 1921, 2310, 2311, 2438, 2439, 1808, 1809, 1810, 1811, 1812,
347    1813,
348  1814, 1815, 1816, 1817, 1936, 1937, 2326, 2327, 2454, 2455, 1824, 1825,
349    1826,
350  1827, 1828, 1829, 1830, 1831, 1832, 1833, 1922, 1923, 2342, 2343, 2408,
351    2409,
352  1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1938, 1939,
353    2358,
354  2359, 2424, 2425, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864,
355    1865,
356  1924, 1925, 2374, 2375, 1928, 1929, 1872, 1873, 1874, 1875, 1876, 1877,
357    1878,
358  1879, 1880, 1881, 1940, 1941, 2390, 2391, 1944, 1945, 1888, 1889, 1890,
359    1891,
360  1892, 1893, 1894, 1895, 1896, 1897, 1926, 1927, 2406, 2407, 2440, 2441,
361    1904,
362  1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1942, 1943, 2422,
363    2423,
364  2456, 2457
365};
366#endif
367
368#if DEC_BIN2DPD==1
369
370const uint16_t BIN2DPD[1000] = { 0, 1, 2, 3, 4, 5, 6, 7,
371  8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 32,
372  33, 34, 35, 36, 37, 38, 39, 40, 41, 48, 49, 50, 51,
373  52, 53, 54, 55, 56, 57, 64, 65, 66, 67, 68, 69, 70,
374  71, 72, 73, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
375  96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 112, 113, 114,
376  115, 116, 117, 118, 119, 120, 121, 10, 11, 42, 43, 74, 75,
377  106, 107, 78, 79, 26, 27, 58, 59, 90, 91, 122, 123, 94,
378  95, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 144, 145,
379  146, 147, 148, 149, 150, 151, 152, 153, 160, 161, 162, 163, 164,
380  165, 166, 167, 168, 169, 176, 177, 178, 179, 180, 181, 182, 183,
381  184, 185, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 208,
382  209, 210, 211, 212, 213, 214, 215, 216, 217, 224, 225, 226, 227,
383  228, 229, 230, 231, 232, 233, 240, 241, 242, 243, 244, 245, 246,
384  247, 248, 249, 138, 139, 170, 171, 202, 203, 234, 235, 206, 207,
385  154, 155, 186, 187, 218, 219, 250, 251, 222, 223, 256, 257, 258,
386  259, 260, 261, 262, 263, 264, 265, 272, 273, 274, 275, 276, 277,
387  278, 279, 280, 281, 288, 289, 290, 291, 292, 293, 294, 295, 296,
388  297, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 320, 321,
389  322, 323, 324, 325, 326, 327, 328, 329, 336, 337, 338, 339, 340,
390  341, 342, 343, 344, 345, 352, 353, 354, 355, 356, 357, 358, 359,
391  360, 361, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 266,
392  267, 298, 299, 330, 331, 362, 363, 334, 335, 282, 283, 314, 315,
393  346, 347, 378, 379, 350, 351, 384, 385, 386, 387, 388, 389, 390,
394  391, 392, 393, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
395  416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 432, 433, 434,
396  435, 436, 437, 438, 439, 440, 441, 448, 449, 450, 451, 452, 453,
397  454, 455, 456, 457, 464, 465, 466, 467, 468, 469, 470, 471, 472,
398  473, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 496, 497,
399  498, 499, 500, 501, 502, 503, 504, 505, 394, 395, 426, 427, 458,
400  459, 490, 491, 462, 463, 410, 411, 442, 443, 474, 475, 506, 507,
401  478, 479, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 528,
402  529, 530, 531, 532, 533, 534, 535, 536, 537, 544, 545, 546, 547,
403  548, 549, 550, 551, 552, 553, 560, 561, 562, 563, 564, 565, 566,
404  567, 568, 569, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585,
405  592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 608, 609, 610,
406  611, 612, 613, 614, 615, 616, 617, 624, 625, 626, 627, 628, 629,
407  630, 631, 632, 633, 522, 523, 554, 555, 586, 587, 618, 619, 590,
408  591, 538, 539, 570, 571, 602, 603, 634, 635, 606, 607, 640, 641,
409  642, 643, 644, 645, 646, 647, 648, 649, 656, 657, 658, 659, 660,
410  661, 662, 663, 664, 665, 672, 673, 674, 675, 676, 677, 678, 679,
411  680, 681, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 704,
412  705, 706, 707, 708, 709, 710, 711, 712, 713, 720, 721, 722, 723,
413  724, 725, 726, 727, 728, 729, 736, 737, 738, 739, 740, 741, 742,
414  743, 744, 745, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761,
415  650, 651, 682, 683, 714, 715, 746, 747, 718, 719, 666, 667, 698,
416  699, 730, 731, 762, 763, 734, 735, 768, 769, 770, 771, 772, 773,
417  774, 775, 776, 777, 784, 785, 786, 787, 788, 789, 790, 791, 792,
418  793, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 816, 817,
419  818, 819, 820, 821, 822, 823, 824, 825, 832, 833, 834, 835, 836,
420  837, 838, 839, 840, 841, 848, 849, 850, 851, 852, 853, 854, 855,
421  856, 857, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 880,
422  881, 882, 883, 884, 885, 886, 887, 888, 889, 778, 779, 810, 811,
423  842, 843, 874, 875, 846, 847, 794, 795, 826, 827, 858, 859, 890,
424  891, 862, 863, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905,
425  912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 928, 929, 930,
426  931, 932, 933, 934, 935, 936, 937, 944, 945, 946, 947, 948, 949,
427  950, 951, 952, 953, 960, 961, 962, 963, 964, 965, 966, 967, 968,
428  969, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 992, 993,
429  994, 995, 996, 997, 998, 999, 1000, 1001, 1008, 1009, 1010, 1011, 1012,
430  1013, 1014, 1015, 1016, 1017, 906, 907, 938, 939, 970, 971, 1002, 1003,
431  974, 975, 922, 923, 954, 955, 986, 987, 1018, 1019, 990, 991, 12,
432  13, 268, 269, 524, 525, 780, 781, 46, 47, 28, 29, 284, 285,
433  540, 541, 796, 797, 62, 63, 44, 45, 300, 301, 556, 557, 812,
434  813, 302, 303, 60, 61, 316, 317, 572, 573, 828, 829, 318, 319,
435  76, 77, 332, 333, 588, 589, 844, 845, 558, 559, 92, 93, 348,
436  349, 604, 605, 860, 861, 574, 575, 108, 109, 364, 365, 620, 621,
437  876, 877, 814, 815, 124, 125, 380, 381, 636, 637, 892, 893, 830,
438  831, 14, 15, 270, 271, 526, 527, 782, 783, 110, 111, 30, 31,
439  286, 287, 542, 543, 798, 799, 126, 127, 140, 141, 396, 397, 652,
440  653, 908, 909, 174, 175, 156, 157, 412, 413, 668, 669, 924, 925,
441  190, 191, 172, 173, 428, 429, 684, 685, 940, 941, 430, 431, 188,
442  189, 444, 445, 700, 701, 956, 957, 446, 447, 204, 205, 460, 461,
443  716, 717, 972, 973, 686, 687, 220, 221, 476, 477, 732, 733, 988,
444  989, 702, 703, 236, 237, 492, 493, 748, 749, 1004, 1005, 942, 943,
445  252, 253, 508, 509, 764, 765, 1020, 1021, 958, 959, 142, 143, 398,
446  399, 654, 655, 910, 911, 238, 239, 158, 159, 414, 415, 670, 671,
447  926, 927, 254, 255
448};
449#endif
450
451#if DEC_DPD2BIN==1
452
453const uint16_t DPD2BIN[1024] = { 0, 1, 2, 3, 4, 5, 6, 7,
454  8, 9, 80, 81, 800, 801, 880, 881, 10, 11, 12, 13, 14,
455  15, 16, 17, 18, 19, 90, 91, 810, 811, 890, 891, 20, 21,
456  22, 23, 24, 25, 26, 27, 28, 29, 82, 83, 820, 821, 808,
457  809, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 92, 93,
458  830, 831, 818, 819, 40, 41, 42, 43, 44, 45, 46, 47, 48,
459  49, 84, 85, 840, 841, 88, 89, 50, 51, 52, 53, 54, 55,
460  56, 57, 58, 59, 94, 95, 850, 851, 98, 99, 60, 61, 62,
461  63, 64, 65, 66, 67, 68, 69, 86, 87, 860, 861, 888, 889,
462  70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 870,
463  871, 898, 899, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
464  180, 181, 900, 901, 980, 981, 110, 111, 112, 113, 114, 115, 116,
465  117, 118, 119, 190, 191, 910, 911, 990, 991, 120, 121, 122, 123,
466  124, 125, 126, 127, 128, 129, 182, 183, 920, 921, 908, 909, 130,
467  131, 132, 133, 134, 135, 136, 137, 138, 139, 192, 193, 930, 931,
468  918, 919, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 184,
469  185, 940, 941, 188, 189, 150, 151, 152, 153, 154, 155, 156, 157,
470  158, 159, 194, 195, 950, 951, 198, 199, 160, 161, 162, 163, 164,
471  165, 166, 167, 168, 169, 186, 187, 960, 961, 988, 989, 170, 171,
472  172, 173, 174, 175, 176, 177, 178, 179, 196, 197, 970, 971, 998,
473  999, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 280, 281,
474  802, 803, 882, 883, 210, 211, 212, 213, 214, 215, 216, 217, 218,
475  219, 290, 291, 812, 813, 892, 893, 220, 221, 222, 223, 224, 225,
476  226, 227, 228, 229, 282, 283, 822, 823, 828, 829, 230, 231, 232,
477  233, 234, 235, 236, 237, 238, 239, 292, 293, 832, 833, 838, 839,
478  240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 284, 285, 842,
479  843, 288, 289, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
480  294, 295, 852, 853, 298, 299, 260, 261, 262, 263, 264, 265, 266,
481  267, 268, 269, 286, 287, 862, 863, 888, 889, 270, 271, 272, 273,
482  274, 275, 276, 277, 278, 279, 296, 297, 872, 873, 898, 899, 300,
483  301, 302, 303, 304, 305, 306, 307, 308, 309, 380, 381, 902, 903,
484  982, 983, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 390,
485  391, 912, 913, 992, 993, 320, 321, 322, 323, 324, 325, 326, 327,
486  328, 329, 382, 383, 922, 923, 928, 929, 330, 331, 332, 333, 334,
487  335, 336, 337, 338, 339, 392, 393, 932, 933, 938, 939, 340, 341,
488  342, 343, 344, 345, 346, 347, 348, 349, 384, 385, 942, 943, 388,
489  389, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 394, 395,
490  952, 953, 398, 399, 360, 361, 362, 363, 364, 365, 366, 367, 368,
491  369, 386, 387, 962, 963, 988, 989, 370, 371, 372, 373, 374, 375,
492  376, 377, 378, 379, 396, 397, 972, 973, 998, 999, 400, 401, 402,
493  403, 404, 405, 406, 407, 408, 409, 480, 481, 804, 805, 884, 885,
494  410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 490, 491, 814,
495  815, 894, 895, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429,
496  482, 483, 824, 825, 848, 849, 430, 431, 432, 433, 434, 435, 436,
497  437, 438, 439, 492, 493, 834, 835, 858, 859, 440, 441, 442, 443,
498  444, 445, 446, 447, 448, 449, 484, 485, 844, 845, 488, 489, 450,
499  451, 452, 453, 454, 455, 456, 457, 458, 459, 494, 495, 854, 855,
500  498, 499, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 486,
501  487, 864, 865, 888, 889, 470, 471, 472, 473, 474, 475, 476, 477,
502  478, 479, 496, 497, 874, 875, 898, 899, 500, 501, 502, 503, 504,
503  505, 506, 507, 508, 509, 580, 581, 904, 905, 984, 985, 510, 511,
504  512, 513, 514, 515, 516, 517, 518, 519, 590, 591, 914, 915, 994,
505  995, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 582, 583,
506  924, 925, 948, 949, 530, 531, 532, 533, 534, 535, 536, 537, 538,
507  539, 592, 593, 934, 935, 958, 959, 540, 541, 542, 543, 544, 545,
508  546, 547, 548, 549, 584, 585, 944, 945, 588, 589, 550, 551, 552,
509  553, 554, 555, 556, 557, 558, 559, 594, 595, 954, 955, 598, 599,
510  560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 586, 587, 964,
511  965, 988, 989, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579,
512  596, 597, 974, 975, 998, 999, 600, 601, 602, 603, 604, 605, 606,
513  607, 608, 609, 680, 681, 806, 807, 886, 887, 610, 611, 612, 613,
514  614, 615, 616, 617, 618, 619, 690, 691, 816, 817, 896, 897, 620,
515  621, 622, 623, 624, 625, 626, 627, 628, 629, 682, 683, 826, 827,
516  868, 869, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 692,
517  693, 836, 837, 878, 879, 640, 641, 642, 643, 644, 645, 646, 647,
518  648, 649, 684, 685, 846, 847, 688, 689, 650, 651, 652, 653, 654,
519  655, 656, 657, 658, 659, 694, 695, 856, 857, 698, 699, 660, 661,
520  662, 663, 664, 665, 666, 667, 668, 669, 686, 687, 866, 867, 888,
521  889, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 696, 697,
522  876, 877, 898, 899, 700, 701, 702, 703, 704, 705, 706, 707, 708,
523  709, 780, 781, 906, 907, 986, 987, 710, 711, 712, 713, 714, 715,
524  716, 717, 718, 719, 790, 791, 916, 917, 996, 997, 720, 721, 722,
525  723, 724, 725, 726, 727, 728, 729, 782, 783, 926, 927, 968, 969,
526  730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 792, 793, 936,
527  937, 978, 979, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749,
528  784, 785, 946, 947, 788, 789, 750, 751, 752, 753, 754, 755, 756,
529  757, 758, 759, 794, 795, 956, 957, 798, 799, 760, 761, 762, 763,
530  764, 765, 766, 767, 768, 769, 786, 787, 966, 967, 988, 989, 770,
531  771, 772, 773, 774, 775, 776, 777, 778, 779, 796, 797, 976, 977,
532  998, 999
533};
534#endif
535