Exemple #1
0
static void* save_state_cmd (int argc, char **argv, void *data)
{
	Node *pos = (Node *) data;
	Node *i;
	Node *j;

	if (savedtree != NULL) {
		tree_free (savedtree);
	}
	savedtree = node_new ();

	i = node_root (pos);
	j = savedtree;
	do {
		j = savedtree = tree_duplicate (i, j);
		i = node_down (i);
		j = node_insert_down (j);
	} while (i != NULL);
	j = node_remove (j);

	{
		int no;

		no = node_no (pos);
		savedtree = node_root (savedtree);
		while (--no)
			savedtree = node_recurse (savedtree);
	}

	return pos;
}
Exemple #2
0
static Node *node_forced_down ( Node *node)
{
	if (node_getflag(node,F_expanded)) {
		return node_recurse (node);
	} else {
		if (node_down (node)) {
			return (node_down (node));
		} else {
			while (node != 0) {
				node = node_left (node);
				if (node_down (node))
					return (node_down (node));
			}
		}
	}
	return NULL;
}
Exemple #3
0
static void* stats_cmd (int argc, char **argv, void *data)
{
	int words = 0, leaves = 0, nodes = 0;
	Node *pos = (Node *) data;
	Node *node = node_root (pos);

	while (node) {
		nodes++;
		words += count_words ((unsigned char *)fixnullstring (node_get (node, TEXT)));
		if (!node_right (node))
			leaves++;

		node = node_recurse (node);
	}

	cli_outfunf ("nodes:%i, leaves:%i words:%i", nodes, leaves, words);

	return pos;
}
Exemple #4
0
static int ls (int argc, char **argv, void *data)
{
	Node *pos = (Node *) data;

	Node *tnode;
	int recurse = 0;
	int indicate_sub = 1;
	int startlevel;

	tnode = node_top (pos);

	startlevel = nodes_left (tnode);
	while (tnode) {

		if (recurse) {
			int j;

			for (j = nodes_left (tnode); j > startlevel; j--) {
				printf ("\t");
			}
		}

		cli_outfunf( "%s %s %s",fixnullstring(node_get (tnode, TEXT)),
		indicate_sub?
		node_right(tnode)?"(..)":""
		:"", tnode==pos?"<":""
		
		);

		if (recurse) {
			tnode = node_recurse (tnode);
			if (nodes_left (tnode) < startlevel)
				tnode = 0;
		} else {
			tnode = node_down (tnode);
		}
	}
	return (int) pos;
}
Exemple #5
0
int export_dot (char *params, void *data)
{
	Node *node = (Node *) data;
	char *filename = params;
	Node *tnode;
	int startlevel;
	FILE *file;

	file_error[0] = 0;

	if (!strcmp (filename, "-"))
		file = stdout;
	else
		file = fopen (filename, "w");
	if (!file) {
		sprintf (file_error, "dot export, unable to open \"%s\"", filename);
		return (int) node;
	}
	startlevel = nodes_left (node);

	tnode = node;

	fprintf (file, "digraph hnb{\nrankdir=LR;\n");

	while ((tnode != 0) & (nodes_left (tnode) >= startlevel)) {
		dot_export_node (file, tnode);

		tnode = node_recurse (tnode);
	}

	fprintf (file, "}\n");

	if (file != stdout)
		fclose (file);
	return (int) node;
}