rem: printf(" we got the colour right have we?%p\n", &screen.file[idx]->color );
context: cb_ok_project(GtkWidget *widget, gpointer data){    char *filename = NULL;    project_list_t *project_list = NULL, *tmp;    int idx;        if (screen.win.project) {	filename = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(screen.win.project));	/*	 * Remember where we loaded file from last time	 */	if (screen.path)	    free(screen.path);	screen.path = (char *)malloc(strlen(filename) + 1);	strcpy(screen.path, filename);#ifdef HAVE_LIBGEN_H        	dirname(screen.path);#endif        	screen.path = strncat(screen.path, "/", 1);    }    switch ((long)data) {    case OPEN_PROJECT:		project_list = read_project_file(filename);	if (project_list) {	    load_project(project_list);	    /*	     * Save project filename for later use	     */	    if (screen.project) {		free(screen.project);		screen.project = NULL;	    }	    screen.project = (char *)malloc(strlen(filename) + 1);	    memset((void *)screen.project, 0, strlen(filename) + 1);	    strncpy(screen.project, filename, strlen(filename));            rename_main_window(filename, NULL);	    redraw_pixmap(screen.drawing_area, TRUE);	} else {	    GERB_MESSAGE("Failed to load project\n");	    goto cb_ok_project_end;	}	all_layers_on(NULL, NULL);	break;    case SAVE_AS_PROJECT:	/*	 * Save project filename for later use	 */	if (screen.project) {	    free(screen.project);	    screen.project = NULL;	}	screen.project = (char *)malloc(strlen(filename) + 1);	memset((void *)screen.project, 0, strlen(filename) + 1);	strncpy(screen.project, filename, strlen(filename));	rename_main_window(filename, NULL);	    case SAVE_PROJECT:	if (!screen.project) {	    GERB_MESSAGE("Missing project filename\n");	    goto cb_ok_project_end;	}		if (screen.path) {      //printf("screen.path exists");	    project_list = (project_list_t *)malloc(sizeof(project_list_t));	    memset(project_list, 0, sizeof(project_list_t));	    project_list->next = project_list;	    project_list->layerno = -1;	    project_list->filename = screen.path;	    project_list->rgb[0] = screen.background->red;	    project_list->rgb[1] = screen.background->green;	    project_list->rgb[2] = screen.background->blue;	    project_list->next = NULL;	}		for (idx = 0; idx < MAX_FILES; idx++) {	    if (screen.file[idx] && screen.file[idx]->name &&  screen.file[idx]->color) {		    tmp = (project_list_t *)malloc(sizeof(project_list_t));		    memset(tmp, 0, sizeof(project_list_t));		    tmp->next = project_list;		    tmp->layerno = idx;		    tmp->filename = screen.file[idx]->name;            printf(" %s we got the filename right have we?\n", screen.file[idx]->name );            printf(" we got the colour right have we?%i\n", screen.file[idx]->color->red );		    tmp->rgb[0] = screen.file[idx]->color->red;            printf(" we got the colour right have we?%p\n", &screen.file[idx]->color );		    tmp->rgb[1] = screen.file[idx]->color->green;		    tmp->rgb[2] = screen.file[idx]->color->blue;		    tmp->inverted = screen.file[idx]->inverted;		    project_list = tmp;	    }	}	if (write_project_file(screen.project, project_list)) {	    GERB_MESSAGE("Failed to write project\n");	    goto cb_ok_project_end;	}	break;    default:	GERB_FATAL_ERROR("Unknown operation in cb_ok_project\n");    }#ifdef HAVE_LIBGEN_H    /*     * Remember where we loaded file from last time     */    filename = dirname(filename);#endif     if (screen.path)	    free(screen.path);    screen.path = (char *)malloc(strlen(filename) + 1);    strcpy(screen.path, filename);    screen.path = strncat(screen.path, "/", 1); cb_ok_project_end:    if (screen.win.project) {	gtk_grab_remove(screen.win.project);    	screen.win.project = NULL;    }    return;} /* cb_ok_project */