Ejemplo n.º 1
0
// 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);
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
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);
			}
		}
	}
}