| 128 |
|
exit(1); |
| 129 |
|
} |
| 130 |
|
*troot = ht; /* first byte is tree height */ |
| 131 |
< |
for (i = 256; i--; ) { /* assign bit count table */ |
| 131 |
> |
for (i = 256; i--; ) { /* assign 0-bit count table */ |
| 132 |
|
int b; |
| 133 |
< |
buf[i] = 0; |
| 133 |
> |
buf[i] = 8; |
| 134 |
|
for (b = i; b; b >>= 1) |
| 135 |
< |
buf[i] += b&1; |
| 135 |
> |
buf[i] -= b&1; |
| 136 |
|
} |
| 137 |
|
return(troot); |
| 138 |
|
} |
| 190 |
|
incr_counter(brp, lvl); /* we intend to eat one */ |
| 191 |
|
brp += tree_br[lvl--].cntr_siz; /* drop a level */ |
| 192 |
|
} |
| 193 |
< |
b = 0; /* browse the leaves */ |
| 194 |
< |
while (ski >= 8-buf[*brp]) { /* buf contains bit counts */ |
| 193 |
> |
while (ski >= buf[*brp]) { /* browse the leaves */ |
| 194 |
|
pos += 8; |
| 195 |
< |
ski -= 8-buf[*brp++]; |
| 195 |
> |
ski -= buf[*brp++]; /* buf contains 0-bit counts */ |
| 196 |
|
} |
| 197 |
< |
while (ski >= 0) { /* target zero leaf bit */ |
| 197 |
> |
b = 0; /* find target bit in byte */ |
| 198 |
> |
while ((ski -= !(*brp & 1<<b)) >= 0) { |
| 199 |
|
pos++; |
| 200 |
< |
ski -= !(*brp & 1<<b++); |
| 200 |
> |
b++; |
| 201 |
|
} |
| 202 |
< |
*brp |= 1 << --b; /* eat it */ |
| 203 |
< |
return(--pos); /* & return leaf's slot# */ |
| 202 |
> |
*brp |= 1<<b; /* eat it */ |
| 203 |
> |
return(pos); /* & return leaf's slot# */ |
| 204 |
|
} |
| 205 |
|
|
| 206 |
|
|