bzip2comn.pp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. unit bzip2comn;
  2. interface
  3. const
  4. max_groups = 6;
  5. max_alpha_size = 258;
  6. max_code_len = 23;
  7. group_size = 50;
  8. iter_count = 4;
  9. max_selectors = 2+(900000 div group_size);
  10. mtfa_size = 4096;
  11. mtfl_size = 16;
  12. type
  13. TCardinal_array = array [0..899999] of Cardinal;
  14. PCardinal_array = ^TCardinal_array;
  15. PCardinal = ^Cardinal;
  16. Thuffarray = array[0..max_alpha_size] of Cardinal;
  17. Phuffarray = ^Thuffarray;
  18. {A bzip2 stream starts with this:}
  19. const bzip2_stream_magic='BZh';
  20. {Error codes for stream errorinfo.}
  21. const
  22. bzip2_bad_header_magic = 1;
  23. bzip2_bad_block_magic = 2;
  24. bzip2_endoffile = 3;
  25. bzip2_data_error = 4;
  26. procedure hb_create_decode_tables(var limit,base,perm:array of cardinal;
  27. var length:array of byte;
  28. minlen,maxlen:byte;alphasize:cardinal);
  29. implementation
  30. procedure hb_create_decode_tables(var limit,base,perm:array of cardinal;
  31. var length:array of byte;
  32. minlen,maxlen:byte;alphasize:cardinal);
  33. var pp,i,j,vec:cardinal;
  34. begin
  35. pp:=0;
  36. for i:=minlen to maxlen do
  37. for j:=0 to alphasize-1 do
  38. if length[j]=i then
  39. begin
  40. perm[pp]:=j;
  41. inc(pp);
  42. end;
  43. for i:=0 to max_code_len-1 do
  44. begin
  45. base[i]:=0;
  46. limit[i]:=0;
  47. end;
  48. for i:=0 to alphasize-1 do
  49. inc(base[length[i]+1]);
  50. for i:=1 to max_code_len-1 do
  51. inc(base[i],base[i-1]);
  52. vec:=0;
  53. for i:=minlen to maxlen do
  54. begin
  55. inc(vec,base[i+1]-base[i]);
  56. limit[i]:=vec-1;
  57. vec:=vec shl 1;
  58. end;
  59. for i:=minlen+1 to maxlen do
  60. base[i]:=((limit[i-1]+1) shl 1)-base[i];
  61. end;
  62. end.