while i<>k do begin
table^[i]:=0;inc(i);
end;
end;
avail:=nchar;mask:=1 shl (15-tablebits);
for ch:=0 to pred(nchar) do
begin
len:=bitlen^[ch];
if len=0 then
continue;
k:=start[len];
nextcode:=k+weight[len];
if len<=tablebits then
begin
for i:=k to pred(nextcode) do
table^[i]:=ch;
end else begin
p:=addr(table^[word(k) shr jutbits]);i:=len-tablebits;
while i<>0 do begin
if p^[0]=0 then
begin
right^[avail]:=0;left^[avail]:=0;p^[0]:=avail;inc(avail);
end;
if (k and mask)<>0 then
p:=addr(right^[p^[0]])
else
p:=addr(left^[p^[0]]);
k:=k shl 1;dec(i);
end;
p^[0]:=ch;
end;
start[len]:=nextcode;
end;
end;
procedure readptlen(nn,nbit,ispecial:twobyteint);
var
i,c,n:twobyteint;
mask:word;
begin
n:=getbits(nbit);
if n=0 then
begin
c:=getbits(nbit);
for i:=0 to pred(nn) do
ptlen[i]:=0;
for i:=0 to 255 do
pttable[i]:=c;
end else begin
i:=0;
while (i<n) do begin
c:=bitbuf shr (bitbufsiz-3);
if c=7 then
begin
mask:=1 shl (bitbufsiz-4);
while (mask and bitbuf)<>0 do begin
mask:=mask shr 1;inc(c);
end;
end;
if c<7 then
fillbuf(3)
else
fillbuf(c-3);
ptlen[i]:=c;inc(i);
if i=ispecial then
begin
c:=pred(twobyteint(getbits(2)));
while c>=0 do begin
ptlen[i]:=0;inc(i);dec(c);
end;
end;
end;
while i<nn do begin
ptlen[i]:=0;inc(i);
end;
maketable(nn,@ptlen,8,@pttable);
end;
end;
procedure readclen;
var
i,c,n:twobyteint;
mask:word;
begin
n:=getbits(cbit);
if n=0 then
begin