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; }
static int copy_cmd (int argc,char **argv, void *data) { Node *pos = (Node *) data; if (clipboard != NULL) { tree_free (clipboard); } clipboard = node_new (); clipboard = tree_duplicate (pos, clipboard); return (int) pos; }
static int paste_cmd (int argc,char **argv, void *data) { Node *pos = (Node *) data; if (clipboard == NULL) { docmd (pos, "status no data in clipboard"); } else { Node *temp; temp = node_insert_down (pos); tree_duplicate (clipboard, temp); } return (int) pos; }
static void* cut_cmd (int argc,char **argv, void *data) { Node *pos = (Node *) data; if(prefs.readonly){ cli_outfun("readonly flag set, avoiding tree change"); return data; } if (clipboard != NULL) { tree_free (clipboard); } clipboard = node_new (); clipboard = tree_duplicate (pos, clipboard); pos = node_remove (pos); docmd(pos,"tree_changed"); return pos; }
static void* paste_cmd (int argc,char **argv, void *data) { Node *pos = (Node *) data; if (clipboard == NULL) { docmd (pos, "status no data in clipboard"); } else { Node *temp; if(prefs.readonly){ cli_outfun("readonly flag set, avoiding insertion"); return data; } temp = node_insert_down (pos); tree_duplicate (clipboard, temp); docmd(pos,"tree_changed"); } return pos; }