docs: function(lcodes, dcodes, blcodes) { // number of codes for each tree
      var rank; // index in bl_order
  
  //    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  //    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
  //	    "too many codes");
  //    Tracev((stderr, "\nbl counts: "));
      zip_send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt
      zip_send_bits(dcodes-1,   5);
      zip_send_bits(blcodes-4,  4); // not -3 as stated in appnote.txt
      for(rank = 0; rank < blcodes; rank++) {
  //      Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
  	zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3);
      }
  
      // send the literal tree
      zip_send_tree(zip_dyn_ltree,lcodes-1);
  
      // send the distance tree
      zip_send_tree(zip_dyn_dtree,dcodes-1);
  }