1 /* ------------------------------------------------------------------------ */
3 /* maketbl.c -- makes decoding table */
5 /* Modified Nobutaka Watazaki */
7 /* Ver. 1.14 Source All chagned 1995.01.14 N.Watazaki */
8 /* ------------------------------------------------------------------------ */
12 make_table(nchar, bitlen, tablebits, table)
14 unsigned char bitlen[];
16 unsigned short table[];
18 unsigned short count[17]; /* count of bitlen */
19 unsigned short weight[17]; /* 0x10000ul >> bitlen */
20 unsigned short start[17]; /* first code of bitlen */
23 int j, k, m, n, avail;
29 for (i = 1; i <= 16; i++) {
31 weight[i] = 1 << (16 - i);
35 for (i = 0; i < nchar; i++) {
38 error("Bad table (case a)");
45 /* calculate first code */
47 for (i = 1; i <= 16; i++) {
49 total += weight[i] * count[i];
51 if ((total & 0xffff) != 0 || tablebits > 16) { /* 16 for weight below */
52 error("make_table(): Bad table (case b)");
56 /* shift data for make table. */
58 for (i = 1; i <= tablebits; i++) {
64 j = start[tablebits + 1] >> m;
65 k = MIN(1 << tablebits, 4096);
67 for (i = j; i < k; i++)
70 /* create table and tree */
71 for (j = 0; j < nchar; j++) {
75 l = start[k] + weight[k];
79 for (i = start[k]; i < l; i++)
83 /* code not in table */
85 if ((i >> m) > 4096) {
87 error("Bad table (case c)");
93 /* make tree (n length) */
96 right[avail] = left[avail] = 0;