aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dvb_chartbl.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2013-12-15 18:38:35 +0000
committerMartin Kaiser <wireshark@kaiser.cx>2013-12-15 18:38:35 +0000
commit9f22d3a558a1e90f4dd540ecc9ec6b02fc4bae9b (patch)
tree36c9be541dff42b02e4617f5b00eed37b04407f9 /epan/dvb_chartbl.c
parent9ce9b10645812e887d2554099371986b5d096372 (diff)
improve DVB-SI string handling
new function dvb_add_chartbl() adds a tree entry for an encoding use FT_BTYES as type for encoding hfs string hfs for DVB-SI strings must have STR_UNICODE, not BASE_NONE make dvb_string_encoding_vals[] internal to dvb_chartbl.c svn path=/trunk/; revision=54128
Diffstat (limited to 'epan/dvb_chartbl.c')
-rw-r--r--epan/dvb_chartbl.c89
1 files changed, 56 insertions, 33 deletions
diff --git a/epan/dvb_chartbl.c b/epan/dvb_chartbl.c
index fb0ac1b4b2..453d70fd19 100644
--- a/epan/dvb_chartbl.c
+++ b/epan/dvb_chartbl.c
@@ -33,6 +33,43 @@
#include "dvb_chartbl.h"
+static const value_string dvb_string_encoding_vals[] = {
+ { DVB_ENCODING_INVALID, "Incorrect length for encoding" },
+ { DVB_ENCODING_RESERVED, "Reserved for future use" },
+ { DVB_ENCODING_UNKNOWN, "Value not specified by spec" },
+
+ { DVB_ENCODING_LATIN, "Latin (default table)" },
+
+ { DVB_ENCODING_ISO_8859_5, "ISO/IEC 8859-5 (Latin/Cyrillic)" },
+ { DVB_ENCODING_ISO_8859_6, "ISO/IEC 8859-6 (Latin/Arabic)" },
+ { DVB_ENCODING_ISO_8859_7, "ISO/IEC 8859-7 (Latin/Greek)" },
+ { DVB_ENCODING_ISO_8859_8, "ISO/IEC 8859-8 (Latin/Hebrew)" },
+ { DVB_ENCODING_ISO_8859_9, "ISO/IEC 8859-9 (West European & Turkish)" },
+ { DVB_ENCODING_ISO_8859_10, "ISO/IEC 8859-10 (North European)" },
+ { DVB_ENCODING_ISO_8859_11, "ISO/IEC 8859-11 (Thai)" },
+ { DVB_ENCODING_ISO_8859_13, "ISO/IEC 8859-13 (Baltic)" },
+ { DVB_ENCODING_ISO_8859_14, "ISO/IEC 8859-14 (Celtic)" },
+ { DVB_ENCODING_ISO_8859_15, "ISO/IEC 8859-15 (West European)" },
+
+ { DVB_ENCODING_EXT_ISO_8859_1, "ISO/IEC 8859-1 (West European)" },
+ { DVB_ENCODING_EXT_ISO_8859_2, "ISO/IEC 8859-2 (East European)" },
+ { DVB_ENCODING_EXT_ISO_8859_3, "ISO/IEC 8859-3 (South European)" },
+ { DVB_ENCODING_EXT_ISO_8859_4, "ISO/IEC 8859-4 (North and North-East European)" },
+ { DVB_ENCODING_EXT_ISO_8859_5, "ISO/IEC 8859-5 (Latin/Cyrillic)" },
+ { DVB_ENCODING_EXT_ISO_8859_6, "ISO/IEC 8859-6 (Latin/Arabic)" },
+ { DVB_ENCODING_EXT_ISO_8859_7, "ISO/IEC 8859-7 (Latin/Greek)" },
+ { DVB_ENCODING_EXT_ISO_8859_8, "ISO/IEC 8859-8 (Latin/Hebrew)" },
+ { DVB_ENCODING_EXT_ISO_8859_9, "ISO/IEC 8859-9 (West European & Turkish)" },
+ { DVB_ENCODING_EXT_ISO_8859_10, "ISO/IEC 8859-10 (North European)" },
+ { DVB_ENCODING_EXT_ISO_8859_11, "ISO/IEC 8859-11 (Thai)" },
+ { DVB_ENCODING_EXT_ISO_8859_13, "ISO/IEC 8859-13 (Baltic)" },
+ { DVB_ENCODING_EXT_ISO_8859_14, "ISO/IEC 8859-14 (Celtic)" },
+ { DVB_ENCODING_EXT_ISO_8859_15, "ISO/IEC 8859-15 (West European)" },
+
+ { 0, NULL }
+};
+
+
static dvb_encoding_e
dvb_analyze_string_charset0(guint8 byte0)
{
@@ -67,6 +104,7 @@ dvb_analyze_string_charset0(guint8 byte0)
}
}
+
static dvb_encoding_e
dvb_analyze_string_charset0_10(guint16 byte12)
{
@@ -109,6 +147,7 @@ dvb_analyze_string_charset0_10(guint16 byte12)
}
}
+
static dvb_encoding_e
dvb_analyze_string_charset0_1F(guint8 byte1)
{
@@ -195,41 +234,25 @@ dvb_enc_to_item_enc(dvb_encoding_e encoding)
}
-const value_string dvb_string_encoding_vals[] = {
- { DVB_ENCODING_INVALID, "Incorrect length for encoding" },
- { DVB_ENCODING_RESERVED, "Reserved for future use" },
- { DVB_ENCODING_UNKNOWN, "Value not specified by spec" },
+void
+dvb_add_chartbl(proto_tree *tree, int hf,
+ tvbuff_t *tvb, gint offset, gint length, dvb_encoding_e encoding)
+{
+ proto_item *pi;
- { DVB_ENCODING_LATIN, "Latin (default table)" },
+ pi = proto_tree_add_bytes_format_value(tree, hf,
+ tvb, offset, length, NULL, "%s",
+ val_to_str_const(encoding, dvb_string_encoding_vals, "Unknown"));
- { DVB_ENCODING_ISO_8859_5, "ISO/IEC 8859-5 (Latin/Cyrillic)" },
- { DVB_ENCODING_ISO_8859_6, "ISO/IEC 8859-6 (Latin/Arabic)" },
- { DVB_ENCODING_ISO_8859_7, "ISO/IEC 8859-7 (Latin/Greek)" },
- { DVB_ENCODING_ISO_8859_8, "ISO/IEC 8859-8 (Latin/Hebrew)" },
- { DVB_ENCODING_ISO_8859_9, "ISO/IEC 8859-9 (West European & Turkish)" },
- { DVB_ENCODING_ISO_8859_10, "ISO/IEC 8859-10 (North European)" },
- { DVB_ENCODING_ISO_8859_11, "ISO/IEC 8859-11 (Thai)" },
- { DVB_ENCODING_ISO_8859_13, "ISO/IEC 8859-13 (Baltic)" },
- { DVB_ENCODING_ISO_8859_14, "ISO/IEC 8859-14 (Celtic)" },
- { DVB_ENCODING_ISO_8859_15, "ISO/IEC 8859-15 (West European)" },
-
- { DVB_ENCODING_EXT_ISO_8859_1, "ISO/IEC 8859-1 (West European)" },
- { DVB_ENCODING_EXT_ISO_8859_2, "ISO/IEC 8859-2 (East European)" },
- { DVB_ENCODING_EXT_ISO_8859_3, "ISO/IEC 8859-3 (South European)" },
- { DVB_ENCODING_EXT_ISO_8859_4, "ISO/IEC 8859-4 (North and North-East European)" },
- { DVB_ENCODING_EXT_ISO_8859_5, "ISO/IEC 8859-5 (Latin/Cyrillic)" },
- { DVB_ENCODING_EXT_ISO_8859_6, "ISO/IEC 8859-6 (Latin/Arabic)" },
- { DVB_ENCODING_EXT_ISO_8859_7, "ISO/IEC 8859-7 (Latin/Greek)" },
- { DVB_ENCODING_EXT_ISO_8859_8, "ISO/IEC 8859-8 (Latin/Hebrew)" },
- { DVB_ENCODING_EXT_ISO_8859_9, "ISO/IEC 8859-9 (West European & Turkish)" },
- { DVB_ENCODING_EXT_ISO_8859_10, "ISO/IEC 8859-10 (North European)" },
- { DVB_ENCODING_EXT_ISO_8859_11, "ISO/IEC 8859-11 (Thai)" },
- { DVB_ENCODING_EXT_ISO_8859_13, "ISO/IEC 8859-13 (Baltic)" },
- { DVB_ENCODING_EXT_ISO_8859_14, "ISO/IEC 8859-14 (Celtic)" },
- { DVB_ENCODING_EXT_ISO_8859_15, "ISO/IEC 8859-15 (West European)" },
-
- { 0, NULL }
-};
+ if (length==0) {
+ PROTO_ITEM_SET_GENERATED(pi);
+ }
+ else {
+ proto_item_append_text(pi, " (%s)",
+ bytes_to_str_punct(
+ tvb_get_ptr(tvb, offset, length), length, ' '));
+ }
+}
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html