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 /* calculate first code */
40 for (i = 1; i <= 16; i++) {
42 total += weight[i] * count[i];
44 if ((total & 0xffff) != 0)
45 error("make_table()", "Bad table (5)\n");
47 /* shift data for make table. */
49 for (i = 1; i <= tablebits; i++) {
55 j = start[tablebits + 1] >> m;
58 for (i = j; i < k; i++)
61 /* create table and tree */
62 for (j = 0; j < nchar; j++) {
66 l = start[k] + weight[k];
69 for (i = start[k]; i < l; i++)
73 /* code not in table */
74 p = &table[(i = start[k]) >> m];
77 /* make tree (n length) */
80 right[avail] = left[avail] = 0;
95 /* Local Variables: */