/* input: tree, buffer (data), offset (data pointer), length of data output: offset return: nothing  */
static void dissect_bcp_data(proto_tree *bcp_tree, packet_info *pinfo, tvbuff_t *tvb, guint *offset, guint len, gint segcode)
/* input: tree, buffer (data), offset (data pointer), length of data output: offset return: nothing  */
static void dissect_bcp_data(proto_tree *bcp_tree, packet_info *pinfo, tvbuff_t *tvb, guint *offset, guint len, gint segcode)
{
    dissector_handle_t  handle;
    tvbuff_t    *next_tvb;
    handle = dissector_get_uint_handle(bcp_subdissector_table, segcode);
    if (handle)
    {
        next_tvb = tvb_new_subset(tvb, *offset, len, len);
        call_dissector(handle, next_tvb, pinfo, bcp_tree);
        *offset += len;
    }
    else
    {
        proto_tree_add_item(bcp_tree, hf_bcp_userdata, tvb, *offset, len, ENC_NA);
        *offset += len;
    }
}