diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2021-05-04 11:18:08 -0400 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2021-05-04 11:18:08 -0400 |
commit | 995ebf6366caaac08107f1ba175d476bbca6e7c4 (patch) | |
tree | d09db8d113dc7956d6540a20137c695668b57622 | |
parent | f50334fb4dabef16340a1748e2344216acfd26a9 (diff) |
start data types
-rw-r--r-- | main.c | 76 | ||||
-rw-r--r-- | ui.glade | 204 |
2 files changed, 267 insertions, 13 deletions
@@ -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); @@ -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> |