From 2e34899a2fff5d5a6414b8f6a0a2c7c207c35923 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 31 Jan 2023 17:14:02 +0100 Subject: [PATCH] partial implementation of edit --- calc.c | 3 +++ parser.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- parser.h | 3 +++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/calc.c b/calc.c index d5b0246..042bda7 100644 --- a/calc.c +++ b/calc.c @@ -224,6 +224,9 @@ int main (int argc, char *argv[]) if (!element->hidden) { print (answer); } + if (element->func == Prog) { + save_string (element->ops[0]->value, line[i]); + } delelement (element); ret = 0; } diff --git a/parser.c b/parser.c index 4f50a0e..b3f370d 100644 --- a/parser.c +++ b/parser.c @@ -774,6 +774,9 @@ void prog (int id, int nbmems, element_t *root) if ((programs + n)->root) { delelement ((programs + n)->root); } + if ((programs + n)->string) { + free ((programs + n)->string); + } } } @@ -850,7 +853,54 @@ void list () } void edit (int id) -{ } +{ + int i, n = -1; + + if (programs) { + + /* look for program */ + for (i = 0; i < nb_programs; i++) { + if ((programs + i)->id == id) { + n = i; + break; + } + } + } + if (n == -1) { + VERBOSE (WARNING, fprintf (stdout, "error unknown program (%d)\n", id)); + return; + } + + /* set string program */ + //rl_insert_text ((programs + n)->string); + VERBOSE (INFO, fprintf (stdout, "edit: %s\n", (programs + n)->string)); +} + +void save_string (int id, char *string) +{ + int i, n = -1; + + if (programs) { + + /* look for program */ + for (i = 0; i < nb_programs; i++) { + if ((programs + i)->id == id) { + n = i; + break; + } + } + } + if (n == -1) { + VERBOSE (WARNING, fprintf (stdout, "error unknown program (%d)\n", id)); + return; + } + + /* save program */ + if ((programs + n)->string) { + free ((programs + n)->string); + } + (programs + n)->string = strdup (string); +} void del (int id) { @@ -878,6 +928,9 @@ void del (int id) if ((programs + n)->root) { delelement ((programs + n)->root); } + if ((programs + n)->string) { + free ((programs + n)->string); + } /* remove entry */ workspace_t *tmp = (workspace_t *) callocordie (nb_programs - 1, sizeof (workspace_t)); diff --git a/parser.h b/parser.h index 8307c88..9fbde3a 100644 --- a/parser.h +++ b/parser.h @@ -55,6 +55,7 @@ typedef struct _workspace_t { double *storage; int storage_size; element_t *root; + char *string; } workspace_t; /* parser function */ @@ -67,6 +68,8 @@ void print_element (element_t *root, int level); double evaluate_element (element_t *root, char mask); +void save_string (int id, char *string); + /* completion functions */ char **generate_completion_list (); -- 2.30.2