Added another tool to generate lists of protocols from Ethereal for the
[obnox/wireshark/wip.git] / doc / eproto2sgml
1 #!/usr/bin/perl
2 #
3 # Reads the display filter keyword dump produced by 'ethereal -G' and
4 # formats it as an SGML bulleted list of protocols.
5 #
6 # STDIN is the ethereal glossary
7 # arg1 is the pod template file. The =insert_dfilter_table token
8 #       will be replaced by the pod-formatted glossary
9 # STDOUT is the output
10 #
11 # $Id: eproto2sgml,v 1.1 2000/08/08 01:56:57 sharpe Exp $
12
13 %ftenum_names = (
14         'FT_NONE',      'No value',
15         'FT_BOOLEAN',   'Boolean',
16         'FT_UINT8',     'Unsigned 8-bit integer',
17         'FT_UINT16',    'Unsigned 16-bit integer',
18         'FT_UINT24',    'Unsigned 24-bit integer',
19         'FT_UINT32',    'Unsigned 32-bit integer',
20         'FT_INT8',      'Signed 8-bit integer',
21         'FT_INT16',     'Signed 16-bit integer',
22         'FT_INT24',     'Signed 24-bit integer',
23         'FT_INT32',     'Signed 32-bit integer',
24         'FT_ABSOLUTE_TIME',     'Date/Time stamp',
25         'FT_RELATIVE_TIME',     'Time duration',
26         'FT_STRING',            'String',
27         'FT_DOUBLE',            'Double-precision floating point',
28         'FT_ETHER',             '6-byte Hardware (MAC) Address',
29         'FT_BYTES',             'Byte array',
30         'FT_IPv4',              'IPv4 address',
31         'FT_IPv6',              'IPv6 address',
32         'FT_IPXNET',            'IPX network or server name',
33         'FT_TEXT_ONLY',         'Text-only. Not filterable'
34 );
35
36 # Read all the data into memory
37 while (<STDIN>) {
38         next unless (/^([PF])/);
39
40         $record_type = $1;
41         chomp($_);
42
43         # Store protocol information
44         if ($record_type eq 'P') {
45                 ($junk, $name, $abbrev) = split(/\t+/, $_);
46                 $proto_abbrev{$name} = $abbrev;
47         }
48         # Store header field information
49         else {
50                 ($junk, $name, $abbrev, $type, $parent) =
51                         split(/\t+/, $_);
52                 push(@{$field_abbrev{$parent}}, $abbrev);
53                 $field_info{$abbrev} = [ $name, $type ];
54         }
55 }
56
57 # if there was no input on stdin, bail out
58 if ($record_type ne 'P' and $record_type ne 'F') {
59         exit;
60 }
61
62 $template = shift(@ARGV);
63
64 open(TEMPLATE, $template) || die "Can't open $template for reading: $!\n";
65
66 while (<TEMPLATE>) {
67         if (/=insert_dfilter_table/) {
68                 &create_dfilter_table;
69         }
70         else {
71                 print;
72         }
73 }
74
75 close(TEMPLATE) || die "Can't close $template: $!\n";
76
77 sub create_dfilter_table {
78
79         print "<itemizedlist id=\"EtherealListOfProtos\">\n";
80
81         # Print each protocol
82         for $proto_name (sort keys %proto_abbrev) {
83
84                 if ($proto_name eq 'Text' && $proto_abbrev{$proto_name} eq 'text') {
85                         next;
86                 }
87
88                 print "   <listitem><para>$proto_name</></>\n";
89         
90         
91             }
92
93         print "</itemizedlist>\n";
94
95 }