// called when cell has been edited static void renderer_edited(GtkCellRendererText *cell, const gchar *path_string, const gchar *new_text, gpointer user_data) { GtkWidget *tree = user_data; GtkTreeView *view = GTK_TREE_VIEW(tree); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkTreeStore *store = GTK_TREE_STORE(model); GtkTreePath *path = gtk_tree_path_new_from_string(path_string); GtkTreeIter iter, child; IO_DEF *s; gchar *str; uint32_t value; gboolean valid; if (!gtk_tree_model_get_iter(model, &iter, path)) return; gtk_tree_model_get(model, &iter, COL_VALUE, &str, COL_S, &s, -1); sscanf(str, "%x", &value); g_free(str); // change value in memory if(validate_value(new_text, 2 *s->size)) { sscanf(new_text, "%x", &value); switch(s->size) { case 1: mem_wr_byte(s->addr, (uint8_t )value); break; case 2: mem_wr_word(s->addr, (uint16_t)value); break; case 4: mem_wr_long(s->addr, (uint32_t)value); break; default: break; } } // and change displayed value (don't rely on typed value !) str = rd_mem_as_str(s); gtk_tree_store_set(store, &iter, COL_VALUE, str, -1); g_free(str); // update bits (children nodes) for(valid = gtk_tree_model_iter_children(model, &child, &iter); valid; valid = gtk_tree_model_iter_next(model, &child)) { gchar* bit_adr; int bit_num; gtk_tree_model_get(model, &child, COL_NAME, &str, COL_ADDR, &bit_adr, -1); sscanf(bit_adr, "%i", &bit_num); gtk_tree_store_set(store, &child, COL_BTNACT, rd_bit(s, bit_num), -1); } gtk_tree_path_free(path); }
void lcd_read(unsigned char cmd){ // read first 4 bit D7(0); D6(0);D5(0); D4(0); D7(rd_bit(cmd,7)); D6(rd_bit(cmd,6)); D5(rd_bit(cmd,5)); D4(rd_bit(cmd,4)); lcd_new_data(); // read second 4 bit D7(0); D6(0);D5(0); D4(0); D7(rd_bit(cmd,3)); D6(rd_bit(cmd,2)); D5(rd_bit(cmd,1)); D4(rd_bit(cmd,0)); lcd_new_data(); }
static void ctree_populate(GtkTreeStore *store) { GNode* node0; GtkTreeIter iter0, iter1, iter2; int i, j, k; int result; // (re)load I/O ports result = ti68k_debug_load_iodefs(inst_paths.misc_dir); if(result == -1) { gtk_tree_store_clear(store); return; // already loaded } node0 = iodefs_tree(); if(node0 == NULL) return; // parse sections for (i = 0; i < (int)g_node_n_children(node0); i++) { GNode *node1 = g_node_nth_child(node0, i); IO_DEF *s = (IO_DEF *)(node1->data); gtk_tree_store_append(store, &iter0, NULL); gtk_tree_store_set(store, &iter0, COL_NAME, s->name, -1); // parse registers for (j = 0; j < (int)g_node_n_children(node1); j++) { GNode *node2 = g_node_nth_child(node1, j); IO_DEF *t = (IO_DEF *)(node2->data); gchar **row_text = g_malloc0((CTREE_NCOLS + 1) *sizeof(gchar *)); row_text[0] = g_strdup(t->name); row_text[1] = rd_mem_as_str(t); row_text[2] = g_strdup_printf("$%06x", t->addr); row_text[3] = g_strdup(t->all_bits ? "" : t->bit_str); gtk_tree_store_append(store, &iter1, &iter0); gtk_tree_store_set(store, &iter1, COL_NAME, row_text[0], COL_VALUE, row_text[1], COL_ADDR, row_text[2], COL_MASK, row_text[3], COL_S, (gpointer)t, COL_FONT, FONT_NAME, COL_EDIT, TRUE, COL_BTNVIS, FALSE, COL_BTNACT, FALSE, -1); g_strfreev(row_text); // parse bits for(k = t->nbits-1; k >= 0 ; k--) { row_text = g_malloc0((CTREE_NCOLS + 1) *sizeof(gchar *)); row_text[0] = g_strdup(t->bit_name[k]); row_text[2] = g_strdup_printf("%i", t->bits[k]); gtk_tree_store_append(store, &iter2, &iter1); gtk_tree_store_set(store, &iter2, COL_NAME, row_text[0], COL_ADDR, row_text[2], COL_S, (gpointer)t, COL_EDIT, FALSE, COL_BTNVIS, TRUE, COL_BTNACT, rd_bit(t, t->bits[k]), -1); } } } }