string spath("<STATIC>/"), ppath("<PATCH>/");
string spath("<STATIC>"), ppath("<PATCH>");
GtkCTreeNode *Create_subtree( GtkCTree *ctree,			      GtkCTreeNode *previous,			      const char *name,			      const char *ext,  // Or whole filename.			      gpointer data,			      GtkCTreeNode *parent = 0			    ){	struct dirent *entry;	GtkCTreeNode *sibling = 0;	char *text[1];	text[0] = (char *) name;	if (!parent)		parent = gtk_ctree_insert_node( ctree,					0,					previous,					text,					0,					0,0,0,0,					FALSE,					TRUE );	gtk_ctree_node_set_selectable( ctree,				       parent, 				       FALSE );	int extlen = strlen(ext);	string spath("<STATIC>/"), ppath("<PATCH>/");	spath = get_system_path(spath);	ppath = get_system_path(ppath);	DIR *dir = opendir(ppath.c_str());// Get names from 'patch' first.	if (dir) {		while(entry=readdir(dir)) {			char *fname = entry->d_name;			int flen = strlen(fname);					// Ignore case of extension.			if(!strcmp(fname,".")||!strcmp(fname,"..") ||				strcasecmp(fname + flen - extlen, ext) != 0)				continue;			sibling = Create_tree_node(ctree, fname, parent,							sibling, data);		}		closedir(dir);	}	dir = opendir(spath.c_str());	// Now go through 'static'.	if (dir) {		while(entry=readdir(dir)) {			char *fname = entry->d_name;			int flen = strlen(fname);					// Ignore case of extension.			if(!strcmp(fname,".")||!strcmp(fname,"..") ||				strcasecmp(fname + flen - extlen, ext) != 0)				continue;					// See if also in 'patch'.			string fullpath(ppath);			fullpath += "/";			fullpath += fname;			if (U7exists(fullpath))				continue;			sibling = Create_tree_node(ctree, fname, parent,							sibling, data);		}		closedir(dir);	}	return parent;}