Hi,
I am writing a dissector for a protocol that is "in-work".  We want to use it to help
in the development phase of the protocol.  I have been trying to make this dissector
read a file that defines the fields (etc.) and "branches" (sub-dissectors?).  The protocol
has several layers of branches.  Anyway, enough background..........
Note:  I am using Ethereal .8.14
Instead of 
 static int hf_pep_FIELDABBREV = -1;
I am doing 
 static int hf_pep_dynamic_fields[MAX_NUM_FIELDS];
then later in a loop:
 hf_pep_dynamic_fields[x] = -1;
Also for field registration, instead of:
  static hf_register_info hf[] = {
    { &hf_pep_header_sync_pattern,
      {
        "SYNC Pattern",
        "pep.header_sync_pattern",
        FT_BYTES,
        BASE_HEX,
        NULL,
        0,
        "This field should always be D00BED00"
      }
    },
 .....etc.
I am doing:
  static hf_register_info hf[MAX_NUM_FIELDS];
then in a loop:
      /** initialize hf each field **/
      hf[hf_field_cnt].p_id = &hf_pep_dynamic_fields[hf_field_cnt];
      hf[hf_field_cnt].hfinfo.name = pep_data_struct[data_cnt].field[field_cnt]->descr;
      strcpy(abbrev_tmp,"pep.");
      strcat(abbrev_tmp,pep_data_struct[data_cnt].data_struct);
      strcat(abbrev_tmp,".");
      strcat(abbrev_tmp,(*pep_data_struct[data_cnt].field[field_cnt]).name);
      hf[hf_field_cnt].hfinfo.abbrev = abbrev_tmp;
      hf[hf_field_cnt].hfinfo.type = get_type(pep_data_struct[data_cnt].field[field_cnt]->type);
      hf[hf_field_cnt].hfinfo.display = get_display_type(pep_data_struct[data_cnt].field[field_cnt]->type);
      hf[hf_field_cnt].hfinfo.strings = NULL;
      hf[hf_field_cnt].hfinfo.bitmask = 0;
      hf[hf_field_cnt].hfinfo.blurb = "";
      hf_field_cnt++;
The following is my registration statement:
  proto_register_field_array(proto_pep, hf, array_length(hf));
(which should be same as the following)
  proto_register_field_array(proto_pep, hf, MAX_NUM_FIELDS);
I also tried:
 proto_register_field_array(proto_pep, hf, hf_field_cnt);
     where hf_field_cnt= # of elements in array actually used
I get a segmentation fault
Program received signal SIGSEGV, Segmentation fault.
proto_register_field_array (parent=1498, hf=0x1, num_records=1210329218) at proto.c:1534
1534	proto.c: No such file or directory.
(xxgdb) 
Granted the num_records argument looks screwed up...  not sure why yet.
But is it posible to do what I am trying to do?  Should the arguement for "proto_register_field_array"
be the total num,ber of elements in the array, or just the number of elements used?
Is there another dissector out there that does something similiar that I can look at?
Thanks
John
-----------------------------------------------------------------------------------------------
John S. Nicholas                                       The Boeing Company
    Stable: john.s.nicholas@xxxxxxxxxx       Phone: 206-662-0298
-----------------------------------------------------------------------------------------------