summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2021-05-04 11:18:08 -0400
committerLeo Tenenbaum <pommicket@gmail.com>2021-05-04 11:18:08 -0400
commit995ebf6366caaac08107f1ba175d476bbca6e7c4 (patch)
treed09db8d113dc7956d6540a20137c695668b57622
parentf50334fb4dabef16340a1748e2344216acfd26a9 (diff)
start data types
-rw-r--r--main.c76
-rw-r--r--ui.glade204
2 files changed, 267 insertions, 13 deletions
diff --git a/main.c b/main.c
index fee4963..65f0657 100644
--- a/main.c
+++ b/main.c
@@ -19,6 +19,53 @@ typedef struct {
Address lo, size;
} Map;
+typedef enum {
+ TYPE_U8,
+ TYPE_S8,
+ TYPE_U16,
+ TYPE_S16,
+ TYPE_U32,
+ TYPE_S32,
+ TYPE_U64,
+ TYPE_S64,
+ TYPE_ASCII,
+ TYPE_F32,
+ TYPE_F64
+} DataType;
+
+static DataType data_type_from_name(char const *name) {
+ switch (name[0]) {
+ case 'u':
+ switch (atoi(&name[1])) {
+ case 8: return TYPE_U8;
+ case 16: return TYPE_U16;
+ case 32: return TYPE_U32;
+ case 64: return TYPE_U64;
+ }
+ break;
+ case 's':
+ switch (atoi(&name[1])) {
+ case 8: return TYPE_S8;
+ case 16: return TYPE_S16;
+ case 32: return TYPE_S32;
+ case 64: return TYPE_S64;
+ }
+ break;
+ case 'f':
+ switch (atoi(&name[1])) {
+ case 32: return TYPE_F32;
+ case 64: return TYPE_F64;
+ }
+ break;
+ case 'a':
+ if (strcmp(name, "ascii") == 0)
+ return TYPE_ASCII;
+ break;
+ }
+ assert(0);
+ return TYPE_U8;
+}
+
typedef struct {
GtkWindow *window;
GtkBuilder *builder;
@@ -29,6 +76,7 @@ typedef struct {
Address memory_view_address;
Address memory_view_entries; // # of entries to show
unsigned nmaps;
+ DataType data_type;
} State;
static void display_dialog_box_nofmt(State *state, GtkMessageType type, char const *message) {
@@ -207,11 +255,27 @@ G_MODULE_EXPORT void update_configuration(GtkWidget *widget, gpointer user_data)
state->memory_view_address = address;
update_memview = true;
}
+ GtkRadioButton *data_type_u8 = GTK_RADIO_BUTTON(
+ gtk_builder_get_object(builder, "type-u8"));
+ for (GSList *l = gtk_radio_button_get_group(data_type_u8);
+ l; l = l->next) {
+ GtkToggleButton *button = l->data;
+ if (gtk_toggle_button_get_active(button)) {
+ char const *type_name = gtk_widget_get_name(GTK_WIDGET(button));
+ DataType type = data_type_from_name(type_name);
+ if (state->data_type != type) {
+ state->data_type = type;
+ update_memview = true;
+ }
+ }
+ }
+
if (update_memview) {
update_memory_view(state, true);
}
}
+// update the memory maps for the current process (state->maps)
static void update_maps(State *state) {
free(state->maps); state->maps = NULL;
@@ -289,6 +353,7 @@ G_MODULE_EXPORT void select_pid(GtkButton *button, gpointer user_data) {
}
}
+// a value in memory was edited
G_MODULE_EXPORT void memory_edited(GtkCellRendererText *renderer, char *path, char *new_text, gpointer user_data) {
State *state = user_data;
GtkBuilder *builder = state->builder;
@@ -343,17 +408,6 @@ static gboolean frame_callback(gpointer user_data) {
State *state = user_data;
GtkBuilder *builder = state->builder;
GtkToggleButton *auto_refresh = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "auto-refresh"));
-#if 0
- GtkWidget *memory_view = GTK_WIDGET(gtk_builder_get_object(builder, "memory-view"));
- for (GtkWidget *focus_widget = gtk_window_get_focus(state->window);
- focus_widget;
- focus_widget = gtk_widget_get_parent(focus_widget)) {
- if (focus_widget == memory_view) {
- // do not allow auto-refresh while potentially editing memory
- gtk_toggle_button_set_active(auto_refresh, 0);
- }
- }
-#endif
if (gtk_toggle_button_get_active(auto_refresh)) {
update_memory_view(state, false);
diff --git a/ui.glade b/ui.glade
index 3cdd536..32c9559 100644
--- a/ui.glade
+++ b/ui.glade
@@ -49,7 +49,7 @@
<object class="GtkEntry" id="memory-display-entries">
<property name="visible">True</property>
<property name="can-focus">True</property>
- <property name="tooltip-text" translatable="yes">Display this many bytes in the memory view</property>
+ <property name="tooltip-text" translatable="yes">Display this many entries in the memory view</property>
<property name="max-length">6</property>
<property name="text" translatable="yes">100</property>
<property name="input-purpose">number</property>
@@ -274,7 +274,207 @@
</packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="tooltip-text" translatable="yes">How to interpret the process' memory.</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Data type:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-u8">
+ <property name="label" translatable="yes">8-bit unsigned integer</property>
+ <property name="name">u8</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="active">True</property>
+ <property name="draw-indicator">True</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-s8">
+ <property name="label" translatable="yes">8-bit signed integer</property>
+ <property name="name">s8</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="active">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-u16">
+ <property name="label" translatable="yes">16-bit unsigned integer</property>
+ <property name="name">u16</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="active">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-s16">
+ <property name="label" translatable="yes">16-bit signed integer</property>
+ <property name="name">s16</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-u32">
+ <property name="label" translatable="yes">32-bit unsigned integer</property>
+ <property name="name">u32</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-s32">
+ <property name="label" translatable="yes">32-bit signed integer</property>
+ <property name="name">s32</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-u64">
+ <property name="label" translatable="yes">64-bit unsigned integer</property>
+ <property name="name">u64</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">9</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-s64">
+ <property name="label" translatable="yes">64-bit signed integer</property>
+ <property name="name">s64</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">10</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-ascii">
+ <property name="label" translatable="yes">ASCII text</property>
+ <property name="name">ascii</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">11</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-f32">
+ <property name="label" translatable="yes">32-bit floating-point</property>
+ <property name="name">f32</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">12</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="type-f64">
+ <property name="label" translatable="yes">64-bit floating-point</property>
+ <property name="name">f64</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">type-u8</property>
+ <signal name="toggled" handler="update_configuration" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">13</property>
+ </packing>
</child>
</object>
<packing>