new BASE_DEC_HEX and BASE_HEX_DEC displaying numbers in "dual" format
authorkukosa <kukosa@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 5 Sep 2005 10:56:41 +0000 (10:56 +0000)
committerkukosa <kukosa@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 5 Sep 2005 10:56:41 +0000 (10:56 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@15682 f5534014-38df-0310-8fa8-9805f1628bb7

epan/proto.c
epan/proto.h

index 50c5329c63d1770d85355aac956faf59831c35dd..3208f309418ab74c65818b61dec2b1e66644e8cd 100644 (file)
@@ -3365,8 +3365,13 @@ fill_label_numeric_bitfield(field_info *fi, gchar *label_str)
        bitfield_byte_length = p - label_str;
 
        /* Fill in the textual info using stored (shifted) value */
-       ret = g_snprintf(p, ITEM_LABEL_LENGTH - bitfield_byte_length,
-                       format,  hfinfo->name, value);
+       if (IS_BASE_DUAL(hfinfo->display)) {
+               ret = g_snprintf(p, ITEM_LABEL_LENGTH - bitfield_byte_length,
+                               format,  hfinfo->name, value, value);
+       } else {
+               ret = g_snprintf(p, ITEM_LABEL_LENGTH - bitfield_byte_length,
+                               format,  hfinfo->name, value);
+       }
        if ((ret == -1) || (ret >= (ITEM_LABEL_LENGTH - bitfield_byte_length)))
                label_str[ITEM_LABEL_LENGTH - 1] = '\0';
 
@@ -3406,8 +3411,13 @@ fill_label_uint(field_info *fi, gchar *label_str)
        value = fvalue_get_integer(&fi->value);
 
        /* Fill in the textual info */
-       ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
-                       format,  hfinfo->name, value);
+       if (IS_BASE_DUAL(hfinfo->display)) {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value, value);
+       } else {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value);
+       }
        if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
                label_str[ITEM_LABEL_LENGTH - 1] = '\0';
 }
@@ -3425,8 +3435,13 @@ fill_label_uint64(field_info *fi, gchar *label_str)
        value = fvalue_get_integer64(&fi->value);
 
        /* Fill in the textual info */
-       ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
-                       format,  hfinfo->name, value);
+       if (IS_BASE_DUAL(hfinfo->display)) {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value, value);
+       } else {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value);
+       }
        if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
                label_str[ITEM_LABEL_LENGTH - 1] = '\0';
 }
@@ -3464,8 +3479,13 @@ fill_label_int(field_info *fi, gchar *label_str)
        value = fvalue_get_integer(&fi->value);
 
        /* Fill in the textual info */
-       ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
-                       format,  hfinfo->name, value);
+       if (IS_BASE_DUAL(hfinfo->display)) {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value, value);
+       } else {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value);
+       }
        if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
                label_str[ITEM_LABEL_LENGTH - 1] = '\0';
 }
@@ -3483,8 +3503,13 @@ fill_label_int64(field_info *fi, gchar *label_str)
        value = fvalue_get_integer64(&fi->value);
 
        /* Fill in the textual info */
-       ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
-                       format,  hfinfo->name, value);
+       if (IS_BASE_DUAL(hfinfo->display)) {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value, value);
+       } else {
+               ret = g_snprintf(label_str, ITEM_LABEL_LENGTH,
+                               format,  hfinfo->name, value);
+       }
        if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
                label_str[ITEM_LABEL_LENGTH - 1] = '\0';
 }
@@ -3532,12 +3557,14 @@ hfinfo_uint_vals_format(header_field_info *hfinfo)
 
        switch(hfinfo->display) {
                case BASE_DEC:
+               case BASE_DEC_HEX:
                        format = "%s: %s (%u)";
                        break;
                case BASE_OCT: /* I'm lazy */
                        format = "%s: %s (%o)";
                        break;
                case BASE_HEX:
+               case BASE_HEX_DEC:
                        switch(hfinfo->type) {
                                case FT_UINT8:
                                        format = "%s: %s (0x%02x)";
@@ -3579,6 +3606,25 @@ hfinfo_uint_format(header_field_info *hfinfo)
                        case BASE_DEC:
                                format = "%s: %u";
                                break;
+                       case BASE_DEC_HEX:
+                               switch(hfinfo->type) {
+                                       case FT_UINT8:
+                                               format = "%s: %u (0x%02x)";
+                                               break;
+                                       case FT_UINT16:
+                                               format = "%s: %u (0x%04x)";
+                                               break;
+                                       case FT_UINT24:
+                                               format = "%s: %u (0x%06x)";
+                                               break;
+                                       case FT_UINT32:
+                                               format = "%s: %u (0x%08x)";
+                                               break;
+                                       default:
+                                               DISSECTOR_ASSERT_NOT_REACHED();
+                                               ;
+                               }
+                               break;
                        case BASE_OCT: /* I'm lazy */
                                format = "%s: %o";
                                break;
@@ -3601,6 +3647,25 @@ hfinfo_uint_format(header_field_info *hfinfo)
                                                ;
                                }
                                break;
+                       case BASE_HEX_DEC:
+                               switch(hfinfo->type) {
+                                       case FT_UINT8:
+                                               format = "%s: 0x%02x (%u)";
+                                               break;
+                                       case FT_UINT16:
+                                               format = "%s: 0x%04x (%u)";
+                                               break;
+                                       case FT_UINT24:
+                                               format = "%s: 0x%06x (%u)";
+                                               break;
+                                       case FT_UINT32:
+                                               format = "%s: 0x%08x (%u)";
+                                               break;
+                                       default:
+                                               DISSECTOR_ASSERT_NOT_REACHED();
+                                               ;
+                               }
+                               break;
                        default:
                                DISSECTOR_ASSERT_NOT_REACHED();
                                ;
@@ -3616,12 +3681,14 @@ hfinfo_int_vals_format(header_field_info *hfinfo)
 
        switch(hfinfo->display) {
                case BASE_DEC:
+               case BASE_DEC_HEX:
                        format = "%s: %s (%d)";
                        break;
                case BASE_OCT: /* I'm lazy */
                        format = "%s: %s (%o)";
                        break;
                case BASE_HEX:
+               case BASE_HEX_DEC:
                        switch(hfinfo->type) {
                                case FT_INT8:
                                        format = "%s: %s (0x%02x)";
@@ -3657,12 +3724,18 @@ hfinfo_uint64_format(header_field_info *hfinfo)
                case BASE_DEC:
                        format = "%s: %" PRIu64;
                        break;
+               case BASE_DEC_HEX:
+                       format = "%s: %" PRIu64 " (%" PRIx64 ")";
+                       break;
                case BASE_OCT: /* I'm lazy */
                        format = "%s: %" PRIo64;
                        break;
                case BASE_HEX:
                        format = "%s: 0x%016" PRIx64;
                        break;
+               case BASE_HEX_DEC:
+                       format = "%s: 0x%016" PRIx64 " (%" PRIu64 ")";
+                       break;
                default:
                        DISSECTOR_ASSERT_NOT_REACHED();
                        ;
@@ -3680,6 +3753,24 @@ hfinfo_int_format(header_field_info *hfinfo)
                case BASE_DEC:
                        format = "%s: %d";
                        break;
+               case BASE_DEC_HEX:
+                       switch(hfinfo->type) {
+                               case FT_INT8:
+                                       format = "%s: %d (0x%02x)";
+                                       break;
+                               case FT_INT16:
+                                       format = "%s: %d (0x%04x)";
+                                       break;
+                               case FT_INT24:
+                                       format = "%s: %d (0x%06x)";
+                                       break;
+                               case FT_INT32:
+                                       format = "%s: %d (0x%08x)";
+                                       break;
+                               default:
+                                       DISSECTOR_ASSERT_NOT_REACHED();
+                                       ;
+                       }
                case BASE_OCT: /* I'm lazy */
                        format = "%s: %o";
                        break;
@@ -3701,6 +3792,24 @@ hfinfo_int_format(header_field_info *hfinfo)
                                        DISSECTOR_ASSERT_NOT_REACHED();
                                        ;
                        }
+               case BASE_HEX_DEC:
+                       switch(hfinfo->type) {
+                               case FT_INT8:
+                                       format = "%s: 0x%02x (%d)";
+                                       break;
+                               case FT_INT16:
+                                       format = "%s: 0x%04x (%d)";
+                                       break;
+                               case FT_INT24:
+                                       format = "%s: 0x%06x (%d)";
+                                       break;
+                               case FT_INT32:
+                                       format = "%s: 0x%08x (%d)";
+                                       break;
+                               default:
+                                       DISSECTOR_ASSERT_NOT_REACHED();
+                                       ;
+                       }
                        break;
                default:
                        DISSECTOR_ASSERT_NOT_REACHED();
@@ -3719,12 +3828,18 @@ hfinfo_int64_format(header_field_info *hfinfo)
                case BASE_DEC:
                        format = "%s: %" PRId64;
                        break;
+               case BASE_DEC_HEX:
+                       format = "%s: %" PRId64 " (%" PRIx64 ")";
+                       break;
                case BASE_OCT: /* I'm lazy */
                        format = "%s: %" PRIo64;
                        break;
                case BASE_HEX:
                        format = "%s: 0x%016" PRIx64;
                        break;
+               case BASE_HEX_DEC:
+                       format = "%s: 0x%016" PRIx64 " (%" PRId64 ")";
+                       break;
                default:
                        DISSECTOR_ASSERT_NOT_REACHED();
                        ;
@@ -4181,6 +4296,12 @@ proto_registrar_dump_fields(int format)
                                                case BASE_OCT:
                                                        base_name = "BASE_OCT";
                                                        break;
+                                               case BASE_DEC_HEX:
+                                                       base_name = "BASE_DEC_HEX";
+                                                       break;
+                                               case BASE_HEX_DEC:
+                                                       base_name = "BASE_HEX_DEC";
+                                                       break;
                                        }
                                }
                        }
@@ -4223,6 +4344,7 @@ hfinfo_numeric_format(header_field_info *hfinfo)
                /* Pick the proper format string */
                switch(hfinfo->display) {
                        case BASE_DEC:
+                       case BASE_DEC_HEX:
                        case BASE_OCT: /* I'm lazy */
                                switch(hfinfo->type) {
                                        case FT_UINT8:
@@ -4249,6 +4371,7 @@ hfinfo_numeric_format(header_field_info *hfinfo)
                                }
                                break;
                        case BASE_HEX:
+                       case BASE_HEX_DEC:
                                switch(hfinfo->type) {
                                        case FT_UINT8:
                                                format = "%s == 0x%02x";
index 4ced956b1b0c4791c78aa10ecd8dfb04b6d0ff78..f6944be66dbea84d5628e4963cab2206161dc855 100644 (file)
@@ -141,9 +141,13 @@ typedef enum {
        BASE_NONE,      /**< none */
        BASE_DEC,       /**< decimal */
        BASE_HEX,       /**< hexadecimal */
-       BASE_OCT        /**< octal */
+       BASE_OCT,       /**< octal */
+       BASE_DEC_HEX,   /**< decimal (hexadecimal) */
+       BASE_HEX_DEC,   /**< hexadecimal (decimal) */
 } base_display_e;
 
+#define IS_BASE_DUAL(b) ((b)==BASE_DEC_HEX||(b)==BASE_HEX_DEC)
+
 /** information describing a header field */
 typedef struct _header_field_info header_field_info;