Reorganized and completed menus:

- Separated "File" into "Filters and "Messages" menus.
- Added "Enable filtering".
- Added "Reload messages file".
- Added "Go to first message".
- Added "Go to message".
- Added "Go to last message".
- Added "Display message header"
- Added "Display brace"
- Added menu key shortcuts (mnemonic and accelerator).
Created an entry box for message goto input number and modified the search function to select the closest lower number if input number is not present in messages list.
Cleared message content view when needed.
Blocked message content redisplay when not needed.
Added a signal handler to capture events on message list tree view.
Modified message content display format.
Modified some log points.

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4426 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
winckel
2013-11-18 10:32:48 +00:00
parent f6c2677a76
commit 7a178e0190
39 changed files with 645 additions and 337 deletions
@@ -8,10 +8,12 @@
#include "ui_interface.h"
int array_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
struct types_s *type_child;
types_t *type_child;
int length = 0;
char cbuf[50];
DISPLAY_PARSE_INFO("array", type->name, offset, parent_offset);
@@ -49,22 +51,23 @@ int array_dissect_from_buffer(
}
}
for (i = 0; i < (items - zero_counter); i++)
{
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "[%d] ", i));
ui_set_signal_text_cb(user_data, cbuf, length);
type->child->type_dissect_from_buffer (
type->child, ui_set_signal_text_cb, user_data, buffer, parent_offset,
offset + i * type_child->size, type->name == NULL ? indent : indent + DISPLAY_TAB_SIZE);
offset + i * type_child->size, indent,
FALSE);
}
if (zero_counter > 0)
{
int length = 0;
char cbuf[50];
INDENTED_STRING(cbuf, type->name == NULL ? indent : indent + DISPLAY_TAB_SIZE,);
length = sprintf(cbuf, "[%d .. %d] ", i, items -1);
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "[%d .. %d] ", i, items -1));
ui_set_signal_text_cb(user_data, cbuf, length);
type->child->type_dissect_from_buffer (
type->child, ui_set_signal_text_cb, user_data,
buffer, parent_offset, offset + i * type_child->size, 0);
buffer, parent_offset, offset + i * type_child->size, indent, FALSE);
}
}
if (type->name) {
@@ -74,7 +77,7 @@ int array_dissect_from_buffer(
return 0;
}
int array_type_file_print(struct types_s *type, int indent, FILE *file) {
int array_type_file_print(types_t *type, int indent, FILE *file) {
if (type == NULL)
return -1;
INDENTED(file, indent, fprintf(file, "<Array>\n"));
@@ -93,7 +96,7 @@ int array_type_file_print(struct types_s *type, int indent, FILE *file) {
return 0;
}
int array_type_hr_display(struct types_s *type, int indent) {
int array_type_hr_display(types_t *type, int indent) {
if (type == NULL)
return -1;
INDENTED(stdout, indent, printf("<Array>\n"));
@@ -4,11 +4,11 @@
#define ARRAY_TYPE_H_
int array_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int array_type_hr_display(struct types_s *type, int indent);
int array_type_hr_display(types_t *type, int indent);
int array_type_file_print(struct types_s *type, int indent, FILE *file);
int array_type_file_print(types_t *type, int indent, FILE *file);
#endif /* ARRAY_TYPE_H_ */
@@ -6,7 +6,7 @@
#include "enum_type.h"
#include "ui_interface.h"
char *enum_type_get_name_from_value(struct types_s *type, uint32_t value)
char *enum_type_get_name_from_value(types_t *type, uint32_t value)
{
char *enum_name = "UNKNOWN";
types_t *enum_value;
@@ -22,8 +22,8 @@ char *enum_type_get_name_from_value(struct types_s *type, uint32_t value)
}
int enum_type_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
uint32_t value = 0;
types_t *values;
@@ -37,7 +37,7 @@ int enum_type_dissect_from_buffer(
values->parent = type;
values->type_dissect_from_buffer(
values, ui_set_signal_text_cb, user_data, buffer, offset, parent_offset,
type->name == NULL ? indent: indent + DISPLAY_TAB_SIZE);
type->name == NULL ? indent: indent + DISPLAY_TAB_SIZE, FALSE);
break;
}
}
@@ -46,14 +46,13 @@ int enum_type_dissect_from_buffer(
char cbuf[50];
length = sprintf(cbuf, "(0x%08x) UNKNOWN;\n", value);
ui_set_signal_text_cb(user_data, cbuf, length);
}
return 0;
}
int enum_type_file_print(struct types_s *type, int indent, FILE *file)
int enum_type_file_print(types_t *type, int indent, FILE *file)
{
types_t *values;
@@ -77,7 +76,7 @@ int enum_type_file_print(struct types_s *type, int indent, FILE *file)
return 0;
}
int enum_type_hr_display(struct types_s *type, int indent)
int enum_type_hr_display(types_t *type, int indent)
{
types_t *values;
@@ -3,14 +3,14 @@
#ifndef ENUM_TYPE_H_
#define ENUM_TYPE_H_
char *enum_type_get_name_from_value(struct types_s *type, uint32_t value);
char *enum_type_get_name_from_value(types_t *type, uint32_t value);
int enum_type_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int enum_type_file_print(struct types_s *type, int indent, FILE *file);
int enum_type_file_print(types_t *type, int indent, FILE *file);
int enum_type_hr_display(struct types_s *type, int indent);
int enum_type_hr_display(types_t *type, int indent);
#endif /* ENUM_TYPE_H_ */
@@ -9,10 +9,10 @@
uint32_t last_enum_value;
int enum_value_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
struct types_s *type_parent = NULL;
types_t *type_parent = NULL;
uint32_t value = 0;
DISPLAY_PARSE_INFO("enum_value", type->name, offset, parent_offset);
@@ -40,16 +40,14 @@ int enum_value_dissect_from_buffer(
last_enum_value = 0;
}
}
sprintf(cbuf, "(0x%08x) %s;\n", value, type->name);
length = strlen(cbuf);
length = sprintf(cbuf, "(0x%08x) %s;\n", value, type->name);
ui_set_signal_text_cb(user_data, cbuf, length);
}
return 0;
}
int enum_value_file_print(struct types_s *type, int indent, FILE *file)
int enum_value_file_print(types_t *type, int indent, FILE *file)
{
if (type == NULL)
return -1;
@@ -63,7 +61,7 @@ int enum_value_file_print(struct types_s *type, int indent, FILE *file)
return 0;
}
int enum_value_type_hr_display(struct types_s *type, int indent)
int enum_value_type_hr_display(types_t *type, int indent)
{
if (type == NULL)
return -1;
@@ -6,11 +6,11 @@
extern uint32_t last_enum_value;
int enum_value_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int enum_value_file_print(struct types_s *type, int indent, FILE *file);
int enum_value_file_print(types_t *type, int indent, FILE *file);
int enum_value_type_hr_display(struct types_s *type, int indent);
int enum_value_type_hr_display(types_t *type, int indent);
#endif /* ENUM_VALUE_TYPE_H_ */
@@ -10,14 +10,14 @@
#include "ui_interface.h"
int field_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
int length = 0;
char cbuf[50];
struct types_s *type_child;
types_t *type_child;
char array_info[50];
int indent_child;
new_line = FALSE;
DISPLAY_PARSE_INFO("field", type->name, offset, parent_offset);
@@ -41,7 +41,7 @@ int field_dissect_from_buffer(
}
if (type_child->type == TYPE_ARRAY) {
struct types_s *type_array_child;
types_t *type_array_child;
/* Ignore TYPEDEF children */
for (type_array_child = type_child->child;
@@ -56,34 +56,45 @@ int field_dissect_from_buffer(
}
DISPLAY_TYPE("Fld");
INDENTED_STRING(cbuf, indent, sprintf(cbuf, ".%s%s = ", type->name ? type->name : "Field", array_info));
length = strlen (cbuf);
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, ".%s%s = ", type->name ? type->name : "Field", array_info));
ui_set_signal_text_cb(user_data, cbuf, length);
indent_child = indent;
if (type_child->type == TYPE_ARRAY || type_child->type == TYPE_STRUCT || type_child->type == TYPE_UNION) {
if (type_child->type == TYPE_ARRAY) {
DISPLAY_BRACE(ui_set_signal_text_cb(user_data, "{", 1);)
ui_set_signal_text_cb(user_data, "\n", 1);
indent_child += DISPLAY_TAB_SIZE;
new_line = TRUE;
}
if (type_child->type == TYPE_FUNDAMENTAL || type_child->type == TYPE_POINTER) {
indent_child = 0;
/*
if (type_child->type == TYPE_STRUCT || type_child->type == TYPE_UNION) {
DISPLAY_BRACE(ui_set_signal_text_cb(user_data, "{", 1);)
ui_set_signal_text_cb(user_data, "\n", 1);
new_line = TRUE;
}
*/
type->child->parent = type;
CHECK_FCT(type->child->type_dissect_from_buffer(
type->child, ui_set_signal_text_cb, user_data, buffer,
parent_offset, offset + type->offset, indent_child));
type->child->type_dissect_from_buffer(
type->child, ui_set_signal_text_cb, user_data, buffer,
parent_offset, offset + type->offset, new_line ? indent + DISPLAY_TAB_SIZE : indent, new_line);
DISPLAY_BRACE(
if (type_child->type == TYPE_ARRAY || type_child->type == TYPE_STRUCT || type_child->type == TYPE_UNION) {
if (type_child->type == TYPE_ARRAY) {
DISPLAY_TYPE("Fld");
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "};\n"));
ui_set_signal_text_cb(user_data, cbuf, length);
});
/*
DISPLAY_BRACE(
if (type_child->type == TYPE_STRUCT || type_child->type == TYPE_UNION) {
DISPLAY_TYPE("Fld");
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "};\n"));
length = strlen (cbuf);
ui_set_signal_text_cb(user_data, cbuf, length);
});
*/
}
}
}
@@ -94,19 +105,16 @@ int field_dissect_from_buffer(
CHECK_FCT(buffer_fetch_bits(buffer, offset + type->offset + parent_offset, type->bits, &value));
DISPLAY_TYPE("Fld");
INDENTED_STRING(
cbuf,
indent,
sprintf(cbuf, ".%s:%d = (0x%0*x) %d;\n", type->name ? type->name : "Field", type->bits, (type->bits + 3) / 4, value, value));
length = strlen (cbuf);
INDENTED_STRING(cbuf, indent,
length = sprintf(cbuf, ".%s:%d = (0x%0*x) %d;\n", type->name ? type->name : "Field", type->bits, (type->bits + 3) / 4, value, value));
ui_set_signal_text_cb(user_data, cbuf, length);
}
return 0;
}
int field_type_file_print(struct types_s *type, int indent, FILE *file) {
int field_type_file_print(types_t *type, int indent, FILE *file) {
if (type == NULL)
return -1;
INDENTED(file, indent, fprintf(file, "<Field>\n"));
@@ -127,7 +135,7 @@ int field_type_file_print(struct types_s *type, int indent, FILE *file) {
return 0;
}
int field_type_hr_display(struct types_s *type, int indent) {
int field_type_hr_display(types_t *type, int indent) {
if (type == NULL)
return -1;
INDENTED(stdout, indent, printf("<Field>\n"));
@@ -4,11 +4,11 @@
#define FIELD_TYPE_H_
int field_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int field_type_file_print(struct types_s *type, int indent, FILE *file);
int field_type_file_print(types_t *type, int indent, FILE *file);
int field_type_hr_display(struct types_s *type, int indent);
int field_type_hr_display(types_t *type, int indent);
#endif /* FIELD_TYPE_H_ */
@@ -5,7 +5,7 @@
#include "file_type.h"
int file_type_file_print(struct types_s *type, int indent, FILE *file)
int file_type_file_print(types_t *type, int indent, FILE *file)
{
if (type == NULL)
return -1;
@@ -17,7 +17,7 @@ int file_type_file_print(struct types_s *type, int indent, FILE *file)
return 0;
}
int file_type_hr_display(struct types_s *type, int indent)
int file_type_hr_display(types_t *type, int indent)
{
if (type == NULL)
return -1;
@@ -3,8 +3,8 @@
#ifndef FILE_TYPE_H_
#define FILE_TYPE_H_
int file_type_file_print(struct types_s *type, int indent, FILE *file);
int file_type_file_print(types_t *type, int indent, FILE *file);
int file_type_hr_display(struct types_s *type, int indent);
int file_type_hr_display(types_t *type, int indent);
#endif /* FILE_TYPE_H_ */
@@ -7,7 +7,7 @@
#include "fundamental_type.h"
#include "ui_interface.h"
uint64_t fundamental_read_from_buffer(struct types_s *type, buffer_t *buffer, uint32_t offset, uint32_t parent_offset) {
uint64_t fundamental_read_from_buffer(types_t *type, buffer_t *buffer, uint32_t offset, uint32_t parent_offset) {
uint64_t value;
switch (type->size) {
@@ -36,8 +36,8 @@ uint64_t fundamental_read_from_buffer(struct types_s *type, buffer_t *buffer, ui
}
int fundamental_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
int length = 0;
char cbuf[200];
@@ -55,6 +55,7 @@ int fundamental_dissect_from_buffer(
value64 = fundamental_read_from_buffer(type, buffer, offset, parent_offset);
indent = new_line ? indent : 0;
if (indent > 0)
{
DISPLAY_TYPE("Fun");
@@ -63,39 +64,36 @@ int fundamental_dissect_from_buffer(
case 8:
value8 = (uint8_t) value64;
INDENTED_STRING(cbuf, indent,
sprintf(cbuf, type_unsigned ? "(0x%02" PRIx8 ") %3" PRIu8 " '%c';\n" : "(0x%02" PRIx8 ") %4" PRId8 " '%c';\n", value8, value8, isprint(value8) ? value8 : '.'));
length = sprintf(cbuf, type_unsigned ? "(0x%02" PRIx8 ") %3" PRIu8 " '%c';\n" : "(0x%02" PRIx8 ") %4" PRId8 " '%c';\n", value8, value8, isprint(value8) ? value8 : '.'));
break;
case 16:
value16 = (uint16_t) value64;
INDENTED_STRING(cbuf, indent,
sprintf(cbuf, type_unsigned ? "(0x%04" PRIx16 ") %5" PRIu16 ";\n" : "(0x%04" PRIx16 ") %6" PRId16 ";\n", value16, value16));
length = sprintf(cbuf, type_unsigned ? "(0x%04" PRIx16 ") %5" PRIu16 ";\n" : "(0x%04" PRIx16 ") %6" PRId16 ";\n", value16, value16));
break;
case 32:
value32 = (uint32_t) value64;
INDENTED_STRING(cbuf, indent,
sprintf(cbuf, type_unsigned ? "(0x%08" PRIx32 ") %9" PRIu32 ";\n" : "(0x%08" PRIx32 ") %10" PRId32 ";\n", value32, value32));
length = sprintf(cbuf, type_unsigned ? "(0x%08" PRIx32 ") %9" PRIu32 ";\n" : "(0x%08" PRIx32 ") %10" PRId32 ";\n", value32, value32));
break;
case 64:
INDENTED_STRING(cbuf, indent,
sprintf(cbuf, type_unsigned ? "(0x%016" PRIx64 ") %20" PRIu64 ";\n" : "(0x%016" PRIx64 ") %20" PRId64 ";\n", value64, value64));
length = sprintf(cbuf, type_unsigned ? "(0x%016" PRIx64 ") %20" PRIu64 ";\n" : "(0x%016" PRIx64 ") %20" PRId64 ";\n", value64, value64));
break;
default:
/* ??? */
break;
}
length = strlen (cbuf);
ui_set_signal_text_cb(user_data, cbuf, length);
return 0;
}
int fundamental_type_file_print(struct types_s *type, int indent, FILE *file) {
int fundamental_type_file_print(types_t *type, int indent, FILE *file) {
if (type == NULL)
return -1;
INDENTED(file, indent, fprintf(file, "<Fundamental>\n"));
@@ -109,7 +107,7 @@ int fundamental_type_file_print(struct types_s *type, int indent, FILE *file) {
return 0;
}
int fundamental_type_hr_display(struct types_s *type, int indent) {
int fundamental_type_hr_display(types_t *type, int indent) {
if (type == NULL)
return -1;
INDENTED(stdout, indent, printf("<Fundamental>\n"));
@@ -3,14 +3,14 @@
#ifndef FUNDAMENTAL_TYPE_H_
#define FUNDAMENTAL_TYPE_H_
uint64_t fundamental_read_from_buffer(struct types_s *type, buffer_t *buffer, uint32_t offset, uint32_t parent_offset);
uint64_t fundamental_read_from_buffer(types_t *type, buffer_t *buffer, uint32_t offset, uint32_t parent_offset);
int fundamental_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int fundamental_type_file_print(struct types_s *type, int indent, FILE *file);
int fundamental_type_file_print(types_t *type, int indent, FILE *file);
int fundamental_type_hr_display(struct types_s *type, int indent);
int fundamental_type_hr_display(types_t *type, int indent);
#endif /* FUNDAMENTAL_TYPE_H_ */
@@ -7,8 +7,8 @@
#include "ui_interface.h"
int pointer_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
int length = 0, i;
char cbuf[200];
@@ -21,37 +21,37 @@ int pointer_dissect_from_buffer(
buffer_fetch_nbytes(buffer, parent_offset + offset, type->size / 8, value);
DISPLAY_TYPE("Ptr");
indent = new_line ? indent : 0;
if (indent > 0)
{
DISPLAY_TYPE("Ptr");
}
if (type->child->name && type->child) {
/*
INDENTED(stdout, indent, fprintf(stdout, "<%s>0x%08x</%s>\n",
type->child->name, value, type->child->name));
*/
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "(%s *) 0x", type->child->name));
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "(%s *) 0x", type->child->name));
}
else {
/*
INDENTED(stdout, indent, fprintf(stdout, "<Pointer>0x%08x</Pointer>\n",
value));
*/
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "(void *) 0x"));
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "(void *) 0x"));
}
length = strlen (cbuf);
/* Append the value */
for (i = type->size / 8 - 1; i >= 0; i--) {
length += sprintf(&cbuf[length], "%02x", value[i]);
}
length += sprintf(&cbuf[length], ";\n");
ui_set_signal_text_cb(user_data, cbuf, length);
return 0;
}
int pointer_type_file_print(struct types_s *type, int indent, FILE *file) {
int pointer_type_file_print(types_t *type, int indent, FILE *file) {
if (type == NULL)
return -1;
INDENTED(file, indent, fprintf(file, "<Pointer>\n"));
@@ -75,6 +75,6 @@ int pointer_type_file_print(struct types_s *type, int indent, FILE *file) {
return 0;
}
int pointer_type_hr_display(struct types_s *type, int indent) {
int pointer_type_hr_display(types_t *type, int indent) {
return pointer_type_file_print(type, indent, stdout);
}
@@ -4,11 +4,11 @@
#define POINTER_TYPE_H_
int pointer_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int pointer_type_file_print(struct types_s *type, int indent, FILE *file);
int pointer_type_file_print(types_t *type, int indent, FILE *file);
int pointer_type_hr_display(struct types_s *type, int indent);
int pointer_type_hr_display(types_t *type, int indent);
#endif /* POINTER_TYPE_H_ */
@@ -7,8 +7,8 @@
#include "ui_interface.h"
int reference_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
DISPLAY_PARSE_INFO("reference", type->name, offset, parent_offset);
@@ -18,7 +18,7 @@ int reference_dissect_from_buffer(
if (type->child != NULL)
type->child->type_dissect_from_buffer(type->child, ui_set_signal_text_cb,
user_data, buffer, offset, parent_offset,
type->name == NULL ? indent: indent + DISPLAY_TAB_SIZE);
type->name == NULL ? indent: indent + DISPLAY_TAB_SIZE, TRUE);
if (type->name) {
INDENTED(stdout, indent, fprintf(stdout, "</%s>\n", type->name));
}
@@ -26,7 +26,7 @@ int reference_dissect_from_buffer(
return 0;
}
int reference_type_file_print(struct types_s *type, int indent, FILE *file)
int reference_type_file_print(types_t *type, int indent, FILE *file)
{
if (type == NULL)
return -1;
@@ -49,7 +49,7 @@ int reference_type_file_print(struct types_s *type, int indent, FILE *file)
return 0;
}
int reference_type_hr_display(struct types_s *type, int indent)
int reference_type_hr_display(types_t *type, int indent)
{
if (type == NULL)
return -1;
@@ -4,11 +4,11 @@
#define REFERENCE_TYPE_H_
int reference_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int reference_type_file_print(struct types_s *type, int indent, FILE *file);
int reference_type_file_print(types_t *type, int indent, FILE *file);
int reference_type_hr_display(struct types_s *type, int indent);
int reference_type_hr_display(types_t *type, int indent);
#endif /* REFERENCE_TYPE_H_ */
@@ -10,47 +10,50 @@
#include "ui_interface.h"
int struct_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
int i;
int length = 0;
char cbuf[200];
char *name;
DISPLAY_PARSE_INFO("structure", type->name, offset, parent_offset);
memset (cbuf, 0, 200);
if (type->name) {
if (new_line) {
DISPLAY_TYPE("Str");
INDENTED_STRING(cbuf, indent, sprintf (cbuf, "%s =%s\n", type->name, "" DISPLAY_BRACE(" {")));
}
length = strlen (cbuf);
if (type->name) {
name = type->name;
}
else {
name = "_anonymous_";
}
INDENTED_STRING(cbuf, new_line ? indent : 0, length = sprintf (cbuf, "%s :", name));
DISPLAY_BRACE(length += sprintf(&cbuf[length], " {"););
length += sprintf(&cbuf[length], "\n");
ui_set_signal_text_cb(user_data, cbuf, length);
for (i = 0; i < type->nb_members; i++) {
if (type->members_child[i] != NULL)
type->members_child[i]->type_dissect_from_buffer (
type->members_child[i], ui_set_signal_text_cb, user_data,
buffer, offset, parent_offset,
type->name == NULL ? indent : indent + DISPLAY_TAB_SIZE);
buffer, offset, parent_offset, indent + DISPLAY_TAB_SIZE, TRUE);
}
DISPLAY_BRACE(
if (type->name) {
DISPLAY_TYPE("Str");
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "};\n"));
}
length = strlen (cbuf);
DISPLAY_TYPE("Str");
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "};\n"));
ui_set_signal_text_cb(user_data, cbuf, length);)
return 0;
}
int struct_type_file_print(struct types_s *type, int indent, FILE *file) {
int struct_type_file_print(types_t *type, int indent, FILE *file) {
int i;
if (type == NULL)
return -1;
@@ -78,7 +81,7 @@ int struct_type_file_print(struct types_s *type, int indent, FILE *file) {
return 0;
}
int struct_type_hr_display(struct types_s *type, int indent) {
int struct_type_hr_display(types_t *type, int indent) {
int i;
if (type == NULL)
return -1;
@@ -4,11 +4,11 @@
#define STRUCT_TYPE_H_
int struct_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int struct_type_hr_display(struct types_s *type, int indent);
int struct_type_hr_display(types_t *type, int indent);
int struct_type_file_print(struct types_s *type, int indent, FILE *file);
int struct_type_file_print(types_t *type, int indent, FILE *file);
#endif /* STRUCT_TYPE_H_ */
@@ -7,22 +7,41 @@
#include "ui_interface.h"
int typedef_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
int length = 0;
char cbuf[200];
types_t *type_child = NULL;
DISPLAY_PARSE_INFO("typedef", type->name, offset, parent_offset);
if (type->child != NULL) {
/* Ignore TYPEDEF children */
for (type_child = type->child; type_child != NULL && type_child->type == TYPE_TYPEDEF; type_child =
type_child->child) {
}
}
if ((type_child == NULL) || (type_child->type != TYPE_FUNDAMENTAL))
{
INDENTED_STRING(cbuf, new_line ? indent : 0, length = sprintf (cbuf, "%s, ", type->name));
ui_set_signal_text_cb(user_data, cbuf, length);
new_line = FALSE;
}
/* Simply call next_type */
if (type->child != NULL) {
type->child->parent = type;
type->child->type_dissect_from_buffer(
type->child, ui_set_signal_text_cb, user_data, buffer, offset, parent_offset, indent);
type->child, ui_set_signal_text_cb, user_data, buffer, offset, parent_offset, indent, new_line);
}
return 0;
}
int typedef_type_file_print(struct types_s *type, int indent, FILE *file)
int typedef_type_file_print(types_t *type, int indent, FILE *file)
{
if (type == NULL)
return -1;
@@ -46,7 +65,7 @@ int typedef_type_file_print(struct types_s *type, int indent, FILE *file)
return 0;
}
int typedef_type_hr_display(struct types_s *type, int indent)
int typedef_type_hr_display(types_t *type, int indent)
{
if (type == NULL)
return -1;
@@ -3,12 +3,12 @@
#ifndef TYPEDEF_TYPE_H_
#define TYPEDEF_TYPE_H_
int typedef_type_file_print(struct types_s *type, int indent, FILE *file);
int typedef_type_file_print(types_t *type, int indent, FILE *file);
int typedef_type_hr_display(struct types_s *type, int indent);
int typedef_type_hr_display(types_t *type, int indent);
int typedef_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
#endif /* TYPEDEF_TYPE_H_ */
+5 -4
View File
@@ -1,6 +1,7 @@
#include <stdio.h>
#include "buffers.h"
#include "ui_main_screen.h"
#include "ui_interface.h"
#ifndef TYPES_H_
@@ -13,10 +14,10 @@
#define ENABLE_DISPLAY_PARSE_INFO 0
/* Activate to show braces, in increase the number of displayed lines (formating option)*/
#define ENABLE_DISPLAY_BRACE 0
#define ENABLE_DISPLAY_BRACE 1
#if (ENABLE_DISPLAY_TYPE != 0)
# define DISPLAY_TYPE(tYPE) ui_set_signal_text_cb(user_data, tYPE, strlen(tYPE));
# define DISPLAY_TYPE(tYPE) ui_set_signal_text_cb(user_data, tYPE" ", strlen(tYPE) + 1);
#else
# define DISPLAY_TYPE(tYPE)
#endif
@@ -35,7 +36,7 @@
#endif
#if (ENABLE_DISPLAY_BRACE != 0)
# define DISPLAY_BRACE(cODE) cODE
# define DISPLAY_BRACE(cODE) if (ui_main_data.display_brace) {cODE}
#else
# define DISPLAY_BRACE(cODE)
#endif
@@ -74,7 +75,7 @@ typedef int (*type_file_print_t)(struct types_s *type, int indent, FILE *file);
**/
typedef int (*type_dissect_from_buffer_t)(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
typedef struct types_s {
/* The type of the current description */
@@ -12,29 +12,49 @@
/* There is only one special case of union which is associated to an index: the message id */
int union_msg_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
uint32_t message_id;
int length = 0;
char cbuf[200];
DISPLAY_PARSE_INFO("union_msg", type->name, offset, parent_offset);
CHECK_FCT(get_message_id(type->head, buffer, &message_id));
if (type->name) {
DISPLAY_TYPE("Uni");
length = sprintf(cbuf, "%s |", type->name);
DISPLAY_BRACE(length += sprintf(&cbuf[length], " {"););
length += sprintf(&cbuf[length], "\n");
ui_set_signal_text_cb(user_data, cbuf, length);
}
if (type->members_child[message_id] != NULL)
type->members_child[message_id]->type_dissect_from_buffer(
type->members_child[message_id], ui_set_signal_text_cb, user_data,
buffer, offset, parent_offset, indent);
buffer, offset, parent_offset, type->name == NULL ? indent : indent + DISPLAY_TAB_SIZE, TRUE);
DISPLAY_BRACE(
if (type->name) {
DISPLAY_TYPE("Uni");
INDENTED_STRING(cbuf, indent, length = sprintf(cbuf, "};\n"));
ui_set_signal_text_cb(user_data, cbuf, length);
});
return RC_OK;
}
int union_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent)
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line)
{
int length = 0;
char cbuf[200];
char *name;
int union_child = 0;
DISPLAY_PARSE_INFO("union", type->name, offset, parent_offset);
@@ -44,10 +64,20 @@ int union_dissect_from_buffer(
// CHECK_FCT(buffer_has_enouch_data(buffer, offset + parent_offset, type->size / 8));
if (type->name) {
// INDENTED(stdout, indent, fprintf(stdout, "<%s>\n", type->name));
name = type->name;
}
else {
name = "_anonymous_";
}
if (new_line) {
DISPLAY_TYPE("Uni");
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "%s {\n", type->name));
}
INDENTED_STRING(cbuf, new_line ? indent : 0, length = sprintf(cbuf, "%s |", name));
DISPLAY_BRACE(length += sprintf(&cbuf[length], " {"););
length += sprintf(&cbuf[length], "\n");
ui_set_signal_text_cb(user_data, cbuf, length);
if (type->name) {
if (type->parent != NULL)
{
if ((type->parent->name != NULL) && (strcmp(type->parent->name, "choice") == 0))
@@ -64,29 +94,25 @@ int union_dissect_from_buffer(
}
}
length = strlen (cbuf);
ui_set_signal_text_cb(user_data, cbuf, length);
/* Only dissect the first field present in unions */
if (type->members_child[union_child] != NULL)
type->members_child[union_child]->type_dissect_from_buffer(
type->members_child[union_child], ui_set_signal_text_cb, user_data, buffer,
offset, parent_offset, type->name == NULL ? indent : indent + DISPLAY_TAB_SIZE);
offset, parent_offset, indent + DISPLAY_TAB_SIZE, TRUE);
if (type->name) {
DISPLAY_TYPE("Uni");
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "};\n"));
}
DISPLAY_BRACE(
DISPLAY_TYPE("Uni");
INDENTED_STRING(cbuf, indent, sprintf(cbuf, "};\n"));
length = strlen (cbuf);
length = strlen (cbuf);
ui_set_signal_text_cb(user_data, cbuf, length);
ui_set_signal_text_cb(user_data, cbuf, length););
return 0;
}
int union_type_file_print(struct types_s *type, int indent, FILE *file) {
int union_type_file_print(types_t *type, int indent, FILE *file) {
int i;
if (type == NULL)
return -1;
@@ -112,7 +138,7 @@ int union_type_file_print(struct types_s *type, int indent, FILE *file) {
return 0;
}
int union_type_hr_display(struct types_s *type, int indent) {
int union_type_hr_display(types_t *type, int indent) {
int i;
if (type == NULL)
return -1;
@@ -4,15 +4,15 @@
#define UNION_TYPE_H_
int union_msg_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int union_dissect_from_buffer(
struct types_s *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent);
types_t *type, ui_set_signal_text_cb_t ui_set_signal_text_cb, gpointer user_data,
buffer_t *buffer, uint32_t offset, uint32_t parent_offset, int indent, gboolean new_line);
int union_type_file_print(struct types_s *type, int indent, FILE *file);
int union_type_file_print(types_t *type, int indent, FILE *file);
int union_type_hr_display(struct types_s *type, int indent);
int union_type_hr_display(types_t *type, int indent);
#endif /* UNION_TYPE_H_ */
@@ -788,6 +788,9 @@ static int xml_parse_doc(xmlDocPtr doc) {
/* Locate the header part of a message */
CHECK_FCT(locate_type("ittiMsgHeader", head, &message_header_type));
/* Locate the main message part */
CHECK_FCT(locate_type("msg", head, &message_type));
/* Locate the origin task id field */
CHECK_FCT(locate_type("originTaskId", message_header_type, &origin_task_id_type));
/* Locate the destination task id field */
@@ -830,7 +833,7 @@ int dissect_signal_header(buffer_t *buffer, ui_set_signal_text_cb_t ui_set_signa
message_header_type->type_dissect_from_buffer(
message_header_type, ui_set_signal_text_cb, cb_user_data,
buffer, 0, 0, INDENT_START);
buffer, 0, 0, INDENT_START, TRUE);
return RC_OK;
}
@@ -838,7 +841,7 @@ int dissect_signal_header(buffer_t *buffer, ui_set_signal_text_cb_t ui_set_signa
int dissect_signal(buffer_t *buffer, ui_set_signal_text_cb_t ui_set_signal_text_cb,
gpointer cb_user_data)
{
if (root == NULL) {
if (message_type == NULL) {
g_error("No messages format definition provided");
return RC_FAIL;
}
@@ -848,8 +851,8 @@ int dissect_signal(buffer_t *buffer, ui_set_signal_text_cb_t ui_set_signal_text_
return RC_FAIL;
}
root->type_dissect_from_buffer(root, ui_set_signal_text_cb, cb_user_data,
buffer, 0, 0, INDENT_START);
message_type->type_dissect_from_buffer(message_type, ui_set_signal_text_cb, cb_user_data,
buffer, 0, 0, INDENT_START, TRUE);
return RC_OK;
}