summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoakim Sindholt <opensource@zhasha.com>2010-04-08 00:20:33 +0200
committerJoakim Sindholt <opensource@zhasha.com>2010-04-08 00:20:33 +0200
commitf805c5a120070286830c409676210049a40757f0 (patch)
tree2829a0c250394d18f281db814a9d96f934ac4c3c
parent6e9f52370133b6e39f6b2d4e7bad9584dbf43412 (diff)
csview: use the new Packet functions
-rw-r--r--src/csview.c173
-rw-r--r--src/csview.vala72
2 files changed, 94 insertions, 151 deletions
diff --git a/src/csview.c b/src/csview.c
index 861e3e7..27a6709 100644
--- a/src/csview.c
+++ b/src/csview.c
@@ -374,18 +374,18 @@ guint8 emulation_bitfield_get_low (EmulationBitfield* self);
static guint32 gui_cs_list_model_bitfield_value (GUICSListModel* self, guint32 addr, guint variant, guint bitfield, guint32 dword);
GUICSListModelRowType gui_cs_list_model_cs_iter_get_row_type (GUICSListModelCSIter* self);
guint32 emulation_packet_get_header (EmulationPacket* self);
-static guint32 gui_cs_list_model_dword_addr (GUICSListModel* self, guint p, guint d);
+guint32 emulation_packet_target_addr (EmulationPacket* self, guint index);
+GType emulation_packet3_get_type (void);
+const char* emulation_packet3_get_opcode_name (EmulationPacket3* self);
guint32 emulation_packet_get (EmulationPacket* self, guint index);
guint32 emulation_packet0_get__ADDR (EmulationPacket0* self);
guint32 emulation_packet0_get__ONE_REG_WR (EmulationPacket0* self);
guint32 emulation_packet0_get__COUNT (EmulationPacket0* self);
guint32 emulation_packet1_get__ADDR1 (EmulationPacket1* self);
guint32 emulation_packet1_get__ADDR2 (EmulationPacket1* self);
-GType emulation_packet3_get_type (void);
guint32 emulation_packet3_get__IT_OPCODE (EmulationPacket3* self);
guint32 emulation_packet3_get__COUNT (EmulationPacket3* self);
static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* iter, gint column, GValue* val);
-gboolean emulation_packet0_get_one_reg_wr (EmulationPacket0* self);
static gboolean gui_cs_list_model_real_iter_next (GtkTreeModel* base, GtkTreeIter* iter);
void gui_cs_list_model_cs_iter_copy (GUICSListModelCSIter* self, GUICSListModelCSIter* it);
static gboolean gui_cs_list_model_real_iter_children (GtkTreeModel* base, GtkTreeIter* iter, GtkTreeIter* parent);
@@ -756,21 +756,27 @@ static char* gui_cs_list_model_translate_addr (GUICSListModel* self, guint32 add
char* _tmp0_;
char* _tmp3_;
g_return_val_if_fail (self != NULL, NULL);
+ if (addr == 0) {
+ result = g_strdup ("");
+ return result;
+ }
regs = emulation_spec_translate_addr (self->priv->m_spec, (guint) addr);
if (regs == NULL) {
result = g_strdup_printf ("0x%04X", addr);
_g_object_unref0 (regs);
return result;
- }
- if (emulation_register_list_get_length (regs) > 1) {
- result = g_strdup ("Multiple");
- _g_object_unref0 (regs);
- return result;
- }
- if (emulation_register_info_get_count (emulation_register_get_info (emulation_register_list_get (regs, (guint) 0))) <= 1) {
- result = g_strdup (emulation_register_info_get_name (emulation_register_get_info (emulation_register_list_get (regs, (guint) 0))));
- _g_object_unref0 (regs);
- return result;
+ } else {
+ if (emulation_register_list_get_length (regs) > 1) {
+ result = g_strdup ("Multiple");
+ _g_object_unref0 (regs);
+ return result;
+ } else {
+ if (emulation_register_info_get_count (emulation_register_get_info (emulation_register_list_get (regs, (guint) 0))) <= 1) {
+ result = g_strdup (emulation_register_info_get_name (emulation_register_get_info (emulation_register_list_get (regs, (guint) 0))));
+ _g_object_unref0 (regs);
+ return result;
+ }
+ }
}
result = (_tmp3_ = g_strconcat (_tmp2_ = g_strconcat (_tmp0_ = g_strconcat (emulation_register_info_get_name (emulation_register_get_info (emulation_register_list_get (regs, (guint) 0))), "[", NULL), _tmp1_ = g_strdup_printf ("%u", emulation_register_get_num (emulation_register_list_get (regs, (guint) 0))), NULL), "]", NULL), _g_free0 (_tmp2_), _g_free0 (_tmp1_), _g_free0 (_tmp0_), _tmp3_);
_g_object_unref0 (regs);
@@ -866,7 +872,7 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
case 0:
{
char* _tmp1_;
- g_value_set_string (val, _tmp1_ = gui_cs_list_model_translate_addr (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) 1)));
+ g_value_set_string (val, _tmp1_ = gui_cs_list_model_translate_addr (self, emulation_packet_target_addr (p, (guint) 0)));
_g_free0 (_tmp1_);
break;
}
@@ -876,7 +882,7 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
char* _tmp4_;
char* _tmp3_;
char* _tmp2_;
- g_value_set_string (val, _tmp5_ = g_strconcat (_tmp3_ = g_strconcat (_tmp2_ = gui_cs_list_model_translate_addr (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) 1)), " | ", NULL), _tmp4_ = gui_cs_list_model_translate_addr (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) 2)), NULL));
+ g_value_set_string (val, _tmp5_ = g_strconcat (_tmp3_ = g_strconcat (_tmp2_ = gui_cs_list_model_translate_addr (self, emulation_packet_target_addr (p, (guint) 0)), " | ", NULL), _tmp4_ = gui_cs_list_model_translate_addr (self, emulation_packet_target_addr (p, (guint) 1)), NULL));
_g_free0 (_tmp5_);
_g_free0 (_tmp4_);
_g_free0 (_tmp3_);
@@ -890,7 +896,8 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
}
case 3:
{
- g_value_set_static_string (val, "TODO");
+ EmulationPacket* _tmp6_;
+ g_value_set_string (val, emulation_packet3_get_opcode_name ((_tmp6_ = p, EMULATION_IS_PACKET3 (_tmp6_) ? ((EmulationPacket3*) _tmp6_) : NULL)));
break;
}
}
@@ -904,46 +911,23 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
switch (column) {
case GUI_CS_LIST_MODEL_COLUMNS_NAME:
{
- char* _tmp6_;
- g_value_set_string (val, _tmp6_ = g_strdup_printf ("DWORD%u", gui_cs_list_model_cs_iter_get_dword (it) - 1));
- _g_free0 (_tmp6_);
+ char* _tmp7_;
+ g_value_set_string (val, _tmp7_ = g_strdup_printf ("DWORD%u", gui_cs_list_model_cs_iter_get_dword (it) - 1));
+ _g_free0 (_tmp7_);
break;
}
case GUI_CS_LIST_MODEL_COLUMNS_VALUE:
{
- char* _tmp7_;
- g_value_set_string (val, _tmp7_ = g_strdup_printf ("0x%08X", emulation_packet_get (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1))));
- _g_free0 (_tmp7_);
+ char* _tmp8_;
+ g_value_set_string (val, _tmp8_ = g_strdup_printf ("0x%08X", emulation_packet_get (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1))));
+ _g_free0 (_tmp8_);
break;
}
case GUI_CS_LIST_MODEL_COLUMNS_TARGET:
{
- switch (emulation_packet_get_type_id (p)) {
- case 0:
- {
- char* _tmp8_;
- g_value_set_string (val, _tmp8_ = gui_cs_list_model_translate_addr (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it))));
- _g_free0 (_tmp8_);
- break;
- }
- case 1:
- {
- char* _tmp9_;
- g_value_set_string (val, _tmp9_ = gui_cs_list_model_translate_addr (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it))));
- _g_free0 (_tmp9_);
- break;
- }
- case 2:
- {
- g_value_set_static_string (val, "");
- break;
- }
- case 3:
- {
- g_value_set_static_string (val, "TODO");
- break;
- }
- }
+ char* _tmp9_;
+ g_value_set_string (val, _tmp9_ = gui_cs_list_model_translate_addr (self, emulation_packet_target_addr (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1))));
+ _g_free0 (_tmp9_);
break;
}
}
@@ -977,7 +961,7 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
switch (column) {
case GUI_CS_LIST_MODEL_COLUMNS_NAME:
{
- g_value_set_static_string (val, gui_cs_list_model_variant_name (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it)), (guint) gui_cs_list_model_cs_iter_get_variant (it)));
+ g_value_set_static_string (val, gui_cs_list_model_variant_name (self, emulation_packet_target_addr (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)), (guint) gui_cs_list_model_cs_iter_get_variant (it)));
break;
}
case GUI_CS_LIST_MODEL_COLUMNS_VALUE:
@@ -998,13 +982,13 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
switch (column) {
case GUI_CS_LIST_MODEL_COLUMNS_NAME:
{
- g_value_set_static_string (val, gui_cs_list_model_bitfield_name (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it)), (guint) gui_cs_list_model_cs_iter_get_variant (it), (guint) gui_cs_list_model_cs_iter_get_bitfield (it)));
+ g_value_set_static_string (val, gui_cs_list_model_bitfield_name (self, emulation_packet_target_addr (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)), (guint) gui_cs_list_model_cs_iter_get_variant (it), (guint) gui_cs_list_model_cs_iter_get_bitfield (it)));
break;
}
case GUI_CS_LIST_MODEL_COLUMNS_VALUE:
{
char* _tmp11_;
- g_value_set_string (val, _tmp11_ = g_strdup_printf ("%u", gui_cs_list_model_bitfield_value (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it)), (guint) gui_cs_list_model_cs_iter_get_variant (it), (guint) gui_cs_list_model_cs_iter_get_bitfield (it), emulation_packet_get (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)))));
+ g_value_set_string (val, _tmp11_ = g_strdup_printf ("%u", gui_cs_list_model_bitfield_value (self, emulation_packet_target_addr (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)), (guint) gui_cs_list_model_cs_iter_get_variant (it), (guint) gui_cs_list_model_cs_iter_get_bitfield (it), emulation_packet_get (p, (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)))));
_g_free0 (_tmp11_);
break;
}
@@ -1041,7 +1025,7 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
case 0:
{
char* _tmp13_;
- g_value_set_string (val, _tmp13_ = gui_cs_list_model_translate_addr (self, emulation_packet0_get__ADDR (p0)));
+ g_value_set_string (val, _tmp13_ = g_strdup_printf ("%04X", emulation_packet0_get__ADDR (p0)));
_g_free0 (_tmp13_);
break;
}
@@ -1079,14 +1063,14 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
case 0:
{
char* _tmp18_;
- g_value_set_string (val, _tmp18_ = gui_cs_list_model_translate_addr (self, emulation_packet1_get__ADDR1 (p1)));
+ g_value_set_string (val, _tmp18_ = g_strdup_printf ("%04X", emulation_packet1_get__ADDR1 (p1)));
_g_free0 (_tmp18_);
break;
}
case 1:
{
char* _tmp19_;
- g_value_set_string (val, _tmp19_ = gui_cs_list_model_translate_addr (self, emulation_packet1_get__ADDR2 (p1)));
+ g_value_set_string (val, _tmp19_ = g_strdup_printf ("%04X", emulation_packet1_get__ADDR2 (p1)));
_g_free0 (_tmp19_);
break;
}
@@ -1157,49 +1141,6 @@ static void gui_cs_list_model_real_get_value (GtkTreeModel* base, GtkTreeIter* i
}
-static guint32 gui_cs_list_model_dword_addr (GUICSListModel* self, guint p, guint d) {
- guint32 result;
- EmulationPacket* _tmp0_;
- guint _tmp1_;
- g_return_val_if_fail (self != NULL, 0U);
- g_assert (p < emulation_cs_get_length (self->priv->m_cs));
- switch ((_tmp1_ = emulation_packet_get_type_id (_tmp0_ = emulation_cs_get (self->priv->m_cs, p)), _g_object_unref0 (_tmp0_), _tmp1_)) {
- case 0:
- {
- EmulationPacket* _tmp2_;
- EmulationPacket0* p0;
- guint _tmp3_ = 0U;
- p0 = (_tmp2_ = emulation_cs_get (self->priv->m_cs, p), EMULATION_IS_PACKET0 (_tmp2_) ? ((EmulationPacket0*) _tmp2_) : NULL);
- if (emulation_packet0_get_one_reg_wr (p0)) {
- _tmp3_ = (guint) 0;
- } else {
- _tmp3_ = 4 * (d - 1);
- }
- result = emulation_packet0_get_addr (p0) + _tmp3_;
- _g_object_unref0 (p0);
- return result;
- }
- case 1:
- {
- EmulationPacket* _tmp4_;
- EmulationPacket1* p1;
- guint32 _tmp5_ = 0U;
- p1 = (_tmp4_ = emulation_cs_get (self->priv->m_cs, p), EMULATION_IS_PACKET1 (_tmp4_) ? ((EmulationPacket1*) _tmp4_) : NULL);
- if (d == 1) {
- _tmp5_ = emulation_packet1_get_addr1 (p1);
- } else {
- _tmp5_ = emulation_packet1_get_addr2 (p1);
- }
- result = _tmp5_;
- _g_object_unref0 (p1);
- return result;
- }
- }
- result = (guint32) 0;
- return result;
-}
-
-
static gboolean gui_cs_list_model_real_iter_next (GtkTreeModel* base, GtkTreeIter* iter) {
GUICSListModel * self;
gboolean result;
@@ -1243,8 +1184,10 @@ static gboolean gui_cs_list_model_real_iter_next (GtkTreeModel* base, GtkTreeIte
case GUI_CS_LIST_MODEL_ROW_TYPE_VARIANT:
{
guint32 v;
+ EmulationPacket* _tmp2_;
+ gboolean _tmp3_;
v = gui_cs_list_model_cs_iter_get_variant (it) + 1;
- if (v >= gui_cs_list_model_get_variant_count (self, gui_cs_list_model_dword_addr (self, (guint) p, (guint) gui_cs_list_model_cs_iter_get_dword (it)))) {
+ if ((_tmp3_ = v >= gui_cs_list_model_get_variant_count (self, emulation_packet_target_addr (_tmp2_ = emulation_cs_get (self->priv->m_cs, (guint) p), (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1))), _g_object_unref0 (_tmp2_), _tmp3_)) {
result = FALSE;
_gui_cs_list_model_cs_iter_unref0 (it);
return result;
@@ -1255,8 +1198,10 @@ static gboolean gui_cs_list_model_real_iter_next (GtkTreeModel* base, GtkTreeIte
case GUI_CS_LIST_MODEL_ROW_TYPE_BITFIELD:
{
guint32 b;
+ EmulationPacket* _tmp4_;
+ gboolean _tmp5_;
b = gui_cs_list_model_cs_iter_get_bitfield (it) + 1;
- if (b >= gui_cs_list_model_get_bitfield_count (self, gui_cs_list_model_dword_addr (self, (guint) p, (guint) gui_cs_list_model_cs_iter_get_dword (it)), (guint) gui_cs_list_model_cs_iter_get_variant (it))) {
+ if ((_tmp5_ = b >= gui_cs_list_model_get_bitfield_count (self, emulation_packet_target_addr (_tmp4_ = emulation_cs_get (self->priv->m_cs, (guint) p), (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)), (guint) gui_cs_list_model_cs_iter_get_variant (it)), _g_object_unref0 (_tmp4_), _tmp5_)) {
result = FALSE;
_gui_cs_list_model_cs_iter_unref0 (it);
return result;
@@ -1267,10 +1212,10 @@ static gboolean gui_cs_list_model_real_iter_next (GtkTreeModel* base, GtkTreeIte
case GUI_CS_LIST_MODEL_ROW_TYPE_HEADER_BITFIELD:
{
guint32 b;
- EmulationPacket* _tmp2_;
- gboolean _tmp3_;
+ EmulationPacket* _tmp6_;
+ gboolean _tmp7_;
b = gui_cs_list_model_cs_iter_get_bitfield (it) + 1;
- if ((_tmp3_ = b >= gui_cs_list_model_packet_headers_length[emulation_packet_get_type_id (_tmp2_ = emulation_cs_get (self->priv->m_cs, (guint) p))], _g_object_unref0 (_tmp2_), _tmp3_)) {
+ if ((_tmp7_ = b >= gui_cs_list_model_packet_headers_length[emulation_packet_get_type_id (_tmp6_ = emulation_cs_get (self->priv->m_cs, (guint) p))], _g_object_unref0 (_tmp6_), _tmp7_)) {
result = FALSE;
_gui_cs_list_model_cs_iter_unref0 (it);
return result;
@@ -1329,7 +1274,9 @@ static gboolean gui_cs_list_model_real_iter_children (GtkTreeModel* base, GtkTre
}
case GUI_CS_LIST_MODEL_ROW_TYPE_DWORD:
{
- if (gui_cs_list_model_get_variant_count (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (pa), (guint) gui_cs_list_model_cs_iter_get_dword (pa))) == 0) {
+ EmulationPacket* _tmp0_;
+ gboolean _tmp1_;
+ if ((_tmp1_ = gui_cs_list_model_get_variant_count (self, emulation_packet_target_addr (_tmp0_ = emulation_cs_get (self->priv->m_cs, (guint) gui_cs_list_model_cs_iter_get_packet (pa)), (guint) (gui_cs_list_model_cs_iter_get_dword (pa) - 1))) == 0, _g_object_unref0 (_tmp0_), _tmp1_)) {
result = FALSE;
_gui_cs_list_model_cs_iter_unref0 (it);
_gui_cs_list_model_cs_iter_unref0 (pa);
@@ -1381,7 +1328,9 @@ static gboolean gui_cs_list_model_real_iter_has_child (GtkTreeModel* base, GtkTr
case GUI_CS_LIST_MODEL_ROW_TYPE_DWORD:
{
gboolean _tmp0_ = FALSE;
- if (gui_cs_list_model_get_variant_count (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it))) == 0) {
+ EmulationPacket* _tmp1_;
+ gboolean _tmp2_;
+ if ((_tmp2_ = gui_cs_list_model_get_variant_count (self, emulation_packet_target_addr (_tmp1_ = emulation_cs_get (self->priv->m_cs, (guint) gui_cs_list_model_cs_iter_get_packet (it)), (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1))) == 0, _g_object_unref0 (_tmp1_), _tmp2_)) {
_tmp0_ = FALSE;
} else {
_tmp0_ = TRUE;
@@ -1448,13 +1397,17 @@ static gint gui_cs_list_model_real_iter_n_children (GtkTreeModel* base, GtkTreeI
}
case GUI_CS_LIST_MODEL_ROW_TYPE_DWORD:
{
- result = (gint) gui_cs_list_model_get_variant_count (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it)));
+ EmulationPacket* _tmp4_;
+ gint _tmp5_;
+ result = (_tmp5_ = (gint) gui_cs_list_model_get_variant_count (self, emulation_packet_target_addr (_tmp4_ = emulation_cs_get (self->priv->m_cs, (guint) gui_cs_list_model_cs_iter_get_packet (it)), (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1))), _g_object_unref0 (_tmp4_), _tmp5_);
_gui_cs_list_model_cs_iter_unref0 (it);
return result;
}
case GUI_CS_LIST_MODEL_ROW_TYPE_VARIANT:
{
- result = (gint) gui_cs_list_model_get_bitfield_count (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (it), (guint) gui_cs_list_model_cs_iter_get_dword (it)), (guint) gui_cs_list_model_cs_iter_get_variant (it));
+ EmulationPacket* _tmp6_;
+ gint _tmp7_;
+ result = (_tmp7_ = (gint) gui_cs_list_model_get_bitfield_count (self, emulation_packet_target_addr (_tmp6_ = emulation_cs_get (self->priv->m_cs, (guint) gui_cs_list_model_cs_iter_get_packet (it)), (guint) (gui_cs_list_model_cs_iter_get_dword (it) - 1)), (guint) gui_cs_list_model_cs_iter_get_variant (it)), _g_object_unref0 (_tmp6_), _tmp7_);
_gui_cs_list_model_cs_iter_unref0 (it);
return result;
}
@@ -1547,7 +1500,9 @@ static gboolean gui_cs_list_model_real_iter_nth_child (GtkTreeModel* base, GtkTr
}
case GUI_CS_LIST_MODEL_ROW_TYPE_DWORD:
{
- if (n >= gui_cs_list_model_get_variant_count (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (pa), (guint) gui_cs_list_model_cs_iter_get_dword (pa)))) {
+ EmulationPacket* _tmp5_;
+ gboolean _tmp6_;
+ if ((_tmp6_ = n >= gui_cs_list_model_get_variant_count (self, emulation_packet_target_addr (_tmp5_ = emulation_cs_get (self->priv->m_cs, (guint) gui_cs_list_model_cs_iter_get_packet (pa)), (guint) (gui_cs_list_model_cs_iter_get_dword (pa) - 1))), _g_object_unref0 (_tmp5_), _tmp6_)) {
result = FALSE;
_gui_cs_list_model_cs_iter_unref0 (it);
_gui_cs_list_model_cs_iter_unref0 (pa);
@@ -1559,7 +1514,9 @@ static gboolean gui_cs_list_model_real_iter_nth_child (GtkTreeModel* base, GtkTr
}
case GUI_CS_LIST_MODEL_ROW_TYPE_VARIANT:
{
- if (n >= gui_cs_list_model_get_bitfield_count (self, gui_cs_list_model_dword_addr (self, (guint) gui_cs_list_model_cs_iter_get_packet (pa), (guint) gui_cs_list_model_cs_iter_get_dword (pa)), (guint) gui_cs_list_model_cs_iter_get_variant (pa))) {
+ EmulationPacket* _tmp7_;
+ gboolean _tmp8_;
+ if ((_tmp8_ = n >= gui_cs_list_model_get_bitfield_count (self, emulation_packet_target_addr (_tmp7_ = emulation_cs_get (self->priv->m_cs, (guint) gui_cs_list_model_cs_iter_get_packet (pa)), (guint) (gui_cs_list_model_cs_iter_get_dword (pa) - 1)), (guint) gui_cs_list_model_cs_iter_get_variant (pa)), _g_object_unref0 (_tmp7_), _tmp8_)) {
result = FALSE;
_gui_cs_list_model_cs_iter_unref0 (it);
_gui_cs_list_model_cs_iter_unref0 (pa);
diff --git a/src/csview.vala b/src/csview.vala
index d474460..5bed51d 100644
--- a/src/csview.vala
+++ b/src/csview.vala
@@ -329,10 +329,17 @@ namespace GUI
private string translate_addr(uint32 addr)
{
+ if (addr == 0) { return ""; }
+
var regs = m_spec.translate_addr((uint)addr);
- if (regs == null) { return addr.to_string("0x%04X"); }
- if (regs.length > 1) { return "Multiple"; }
- if (regs[0].info.count <= 1) { return regs[0].info.name; }
+ if (regs == null) {
+ return addr.to_string("0x%04X");
+ } else if (regs.length > 1) {
+ return "Multiple";
+ } else if (regs[0].info.count <= 1) {
+ return regs[0].info.name;
+ }
+
return regs[0].info.name + "[" + regs[0].num.to_string() + "]";
}
@@ -384,10 +391,10 @@ namespace GUI
case Columns.VALUE: val.set_string(p.header.to_string("0x%08X")); break;
case Columns.TARGET:
switch (p.type_id) {
- case 0: val.set_string(translate_addr(dword_addr(it.packet, 1))); break;
- case 1: val.set_string(translate_addr(dword_addr(it.packet, 1)) + " | " + translate_addr(dword_addr(it.packet, 2))); break;
+ case 0: val.set_string(translate_addr(p.target_addr(0))); break;
+ case 1: val.set_string(translate_addr(p.target_addr(0)) + " | " + translate_addr(p.target_addr(1))); break;
case 2: val.set_static_string(""); break;
- case 3: val.set_static_string("TODO"); break;
+ case 3: val.set_string((p as Packet3).opcode_name); break;
}
break;
}
@@ -397,14 +404,7 @@ namespace GUI
switch (column) {
case Columns.NAME: val.set_string((it.dword-1).to_string("DWORD%u")); break;
case Columns.VALUE: val.set_string(p[it.dword-1].to_string("0x%08X")); break;
- case Columns.TARGET:
- switch (p.type_id) {
- case 0: val.set_string(translate_addr(dword_addr(it.packet, it.dword))); break;
- case 1: val.set_string(translate_addr(dword_addr(it.packet, it.dword))); break;
- case 2: val.set_static_string(""); break;
- case 3: val.set_static_string("TODO"); break;
- }
- break;
+ case Columns.TARGET: val.set_string(translate_addr(p.target_addr(it.dword-1))); break;
}
break;
@@ -418,7 +418,7 @@ namespace GUI
case RowType.VARIANT:
switch (column) {
- case Columns.NAME: val.set_static_string(variant_name(dword_addr(it.packet, it.dword), it.variant)); break;
+ case Columns.NAME: val.set_static_string(variant_name(p.target_addr(it.dword-1), it.variant)); break;
case Columns.VALUE: val.set_static_string(""); break;
case Columns.TARGET: val.set_static_string(""); break;
}
@@ -426,8 +426,8 @@ namespace GUI
case RowType.BITFIELD:
switch (column) {
- case Columns.NAME: val.set_static_string(bitfield_name(dword_addr(it.packet, it.dword), it.variant, it.bitfield)); break;
- case Columns.VALUE: val.set_string(bitfield_value(dword_addr(it.packet, it.dword), it.variant, it.bitfield, p[it.dword-1]).to_string()); break;
+ case Columns.NAME: val.set_static_string(bitfield_name(p.target_addr(it.dword-1), it.variant, it.bitfield)); break;
+ case Columns.VALUE: val.set_string(bitfield_value(p.target_addr(it.dword-1), it.variant, it.bitfield, p[it.dword-1]).to_string()); break;
case Columns.TARGET: val.set_static_string(""); break;
}
break;
@@ -441,7 +441,7 @@ namespace GUI
case 0:
Packet0 p0 = p as Packet0;
switch (it.bitfield) {
- case 0: val.set_string(translate_addr(p0._ADDR)); break;
+ case 0: val.set_string(p0._ADDR.to_string("%04X")); break;
case 1: val.set_string(p0._ONE_REG_WR.to_string()); break;
case 2: val.set_string(p0._COUNT.to_string()); break;
case 3: val.set_string(p.type_id.to_string()); break;
@@ -450,8 +450,8 @@ namespace GUI
case 1:
Packet1 p1 = p as Packet1;
switch (it.bitfield) {
- case 0: val.set_string(translate_addr(p1._ADDR1)); break;
- case 1: val.set_string(translate_addr(p1._ADDR2)); break;
+ case 0: val.set_string(p1._ADDR1.to_string("%04X")); break;
+ case 1: val.set_string(p1._ADDR2.to_string("%04X")); break;
case 2: val.set_string(p.type_id.to_string()); break;
}
break;
@@ -463,7 +463,7 @@ namespace GUI
case 3:
Packet3 p3 = p as Packet3;
switch (it.bitfield) {
- case 0: val.set_string(p3._IT_OPCODE.to_string("0x%02X")); break; /* TODO: resolve opcode */
+ case 0: val.set_string(p3._IT_OPCODE.to_string("0x%02X")); break;
case 1: val.set_string(p3._COUNT.to_string()); break;
case 2: val.set_string(p.type_id.to_string()); break;
}
@@ -475,20 +475,6 @@ namespace GUI
}
}
- private uint32 dword_addr(uint p, uint d)
- {
- assert(p < m_cs.length);
- switch (m_cs[p].type_id) {
- case 0:
- Packet0 p0 = m_cs[p] as Packet0;
- return p0.addr + ((p0.one_reg_wr) ? 0 : 4*(d-1));
- case 1:
- Packet1 p1 = m_cs[p] as Packet1;
- return (d == 1) ? p1.addr1 : p1.addr2;
- }
- return 0;
- }
-
public bool iter_next(ref TreeIter iter)
{
if (iter.stamp != m_stamp) { return false; }
@@ -512,13 +498,13 @@ namespace GUI
case RowType.VARIANT:
var v = it.variant+1;
- if (v >= get_variant_count(dword_addr(p, it.dword))) { return false; }
+ if (v >= get_variant_count(m_cs[p].target_addr(it.dword-1))) { return false; }
it.variant = v;
break;
case RowType.BITFIELD:
var b = it.bitfield+1;
- if (b >= get_bitfield_count(dword_addr(p, it.dword), it.variant)) { return false; }
+ if (b >= get_bitfield_count(m_cs[p].target_addr(it.dword-1), it.variant)) { return false; }
it.bitfield = b;
break;
@@ -563,7 +549,7 @@ namespace GUI
break;
case RowType.DWORD:
- if (get_variant_count(dword_addr(pa.packet, pa.dword)) == 0) { return false; }
+ if (get_variant_count(m_cs[pa.packet].target_addr(pa.dword-1)) == 0) { return false; }
it.variant = 0;
it.in_variants = true;
break;
@@ -585,7 +571,7 @@ namespace GUI
switch (it.row_type) {
case RowType.PACKET: return true;
case RowType.HEADER: return true;
- case RowType.DWORD: return (get_variant_count(dword_addr(it.packet, it.dword)) == 0) ? false : true;
+ case RowType.DWORD: return (get_variant_count(m_cs[it.packet].target_addr(it.dword-1)) == 0) ? false : true;
case RowType.VARIANT: return true;
case RowType.BITFIELD: return false;
case RowType.HEADER_BITFIELD: return false;
@@ -603,8 +589,8 @@ namespace GUI
switch (it.row_type) {
case RowType.PACKET: return (int)m_cs[it.packet].length+1;
case RowType.HEADER: return (int)packet_headers_length[m_cs[it.packet].type_id];
- case RowType.DWORD: return (int)get_variant_count(dword_addr(it.packet, it.dword));
- case RowType.VARIANT: return (int)get_bitfield_count(dword_addr(it.packet, it.dword), it.variant);
+ case RowType.DWORD: return (int)get_variant_count(m_cs[it.packet].target_addr(it.dword-1));
+ case RowType.VARIANT: return (int)get_bitfield_count(m_cs[it.packet].target_addr(it.dword-1), it.variant);
case RowType.BITFIELD: return 0;
case RowType.HEADER_BITFIELD: return 0;
}
@@ -645,13 +631,13 @@ namespace GUI
break;
case RowType.DWORD:
- if (n >= get_variant_count(dword_addr(pa.packet, pa.dword))) { return false; }
+ if (n >= get_variant_count(m_cs[pa.packet].target_addr(pa.dword-1))) { return false; }
it.in_variants = true;
it.variant = n;
break;
case RowType.VARIANT:
- if (n >= get_bitfield_count(dword_addr(pa.packet, pa.dword), pa.variant)) { return false; }
+ if (n >= get_bitfield_count(m_cs[pa.packet].target_addr(pa.dword-1), pa.variant)) { return false; }
it.in_bitfields = true;
it.bitfield = n;
break;