aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/process-x11-fields.pl
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>2004-07-18 18:06:47 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>2004-07-18 18:06:47 +0000
commit669db206cb1f270046ad400fff7655e20c63e723 (patch)
tree4eff24a2e16c8963e497e1fc575f35e6af59bd26 /epan/dissectors/process-x11-fields.pl
parentae46c27a38700af669ef907491081f09df6f6b2c (diff)
Move dissectors to epan/dissectors directory.
Also move ncp222.py, x11-fields, process-x11-fields.pl, make-reg-dotc, and make-reg-dotc.py. Adjust #include lines in files that include packet-*.h files. svn path=/trunk/; revision=11410
Diffstat (limited to 'epan/dissectors/process-x11-fields.pl')
-rw-r--r--epan/dissectors/process-x11-fields.pl131
1 files changed, 131 insertions, 0 deletions
diff --git a/epan/dissectors/process-x11-fields.pl b/epan/dissectors/process-x11-fields.pl
new file mode 100644
index 0000000000..057f9b44b7
--- /dev/null
+++ b/epan/dissectors/process-x11-fields.pl
@@ -0,0 +1,131 @@
+#!/usr/bin/perl
+#
+# Script to convert "x11-fields" file, listing fields for
+# X11 dissector, into header files declaring field-index
+# values and field definitions for those fields.
+#
+# Copyright 2000, Christophe Tronche <ch.tronche@computer.org>
+#
+# $Id$
+#
+# Ethereal - Network traffic analyzer
+# By Gerald Combs <gerald@ethereal.com>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+open(DECL, ">x11-declarations.h") || die;
+open(REG, ">x11-register-info.h") || die;
+
+$comment = "/* This file is generated by $0, do not edit. */\n\n";
+print DECL $comment;
+print REG $comment;
+
+$prefix = '';
+$subfieldStringLength = 0;
+
+while(<>) {
+ s/#.*$//go;
+ next if /^\s*$/o;
+ s/^(\s*)//o;
+ $subfield = $1;
+
+ if (length $subfield != $subfieldStringLength) {
+ if (!length $subfield) {
+ $prefix = '';
+ } elsif (length $subfield > $subfieldStringLength) {
+ $prefix .= "$lastAbbrev.";
+ } else {
+ $prefix =~ s/^(.*)\.[^\.]+\.$/$1./o;
+ }
+ $subfieldStringLength = length $subfield;
+ }
+
+ @fields = split /\s+/o ;
+ if ($fields[0] eq '#') {
+ #
+ # If the line begins with "#", treat it as a comment, by
+ # ignoring it.
+ #
+ # (We don't support comments at the end of a line; that would
+ # require some more pain in our simple parser.)
+ #
+ next;
+ }
+ $abbrev = shift @fields;
+ $type = shift @fields;
+ $lastAbbrev = $abbrev;
+
+ $field = $prefix.$abbrev;
+
+ if ($fields[0] =~ /^\d+$/o) {
+ #
+ # This is presumably a Boolean bitfield, and this is the number
+ # of bits in the parent field.
+ #
+ $fieldDisplay = shift @fields;
+ } else {
+ #
+ # The next token is the base for the field.
+ #
+ $fieldDisplay = "BASE_".shift @fields;
+ }
+
+ if ($fields[0] eq 'VALS') {
+ #
+ # It's an enumerated field, with the value_string table having a
+ # name based on the field's name.
+ #
+ shift @fields;
+ $fieldStrings = "VALS(${abbrev}_vals)";
+ $fieldStrings =~ s/-/_/go;
+ } elsif ($fields[0] =~ /^VALS\(/o) {
+ #
+ # It's an enumerated field, with a specified name for the
+ # value_string table.
+ #
+ $fieldStrings = shift @fields;
+ $fieldStrings =~ s/\)/_vals\)/o;
+ } else {
+ #
+ # It's not an enumerated field.
+ #
+ $fieldStrings = 'NULL';
+ }
+
+ if ($fields[0] =~ /^0x/) {
+ #
+ # The next token looks like a bitmask for a bitfield.
+ #
+ $mask = shift @fields;
+ } else {
+ $mask = 0;
+ }
+
+ $rest = join(' ', @fields);
+ $longName = uc $name;
+ $longName = $rest if ($rest);
+
+ $variable = $field;
+ $variable =~ s/-/_/go;
+ $variable =~ s/\./_/go;
+
+ print DECL "static int hf_x11_$variable = -1;\n";
+
+ print REG <<END;
+{ &hf_x11_$variable, { "$abbrev", "x11.$field", FT_$type, $fieldDisplay, $fieldStrings, $mask, "$longName", HFILL }},
+END
+}