aboutsummaryrefslogtreecommitdiff
path: root/math/eval/files/patch-ac
diff options
context:
space:
mode:
Diffstat (limited to 'math/eval/files/patch-ac')
-rw-r--r--math/eval/files/patch-ac166
1 files changed, 166 insertions, 0 deletions
diff --git a/math/eval/files/patch-ac b/math/eval/files/patch-ac
new file mode 100644
index 000000000000..50dd1635f5b0
--- /dev/null
+++ b/math/eval/files/patch-ac
@@ -0,0 +1,166 @@
+--- /tmp/Eval/source/eval.c Tue Apr 13 21:04:42 1993
++++ eval.c Wed Sep 24 12:25:27 1997
+@@ -44,6 +44,9 @@
+ */
+
+ #include "eval.h"
++#include <readline/readline.h>
++#include <readline/history.h>
++#include <signal.h>
+
+ static char tempname[80];
+ static char wdir[100];
+@@ -122,6 +125,7 @@
+ static BOOLEAN process_line(FILE *stream,int showinp,int showout,VARPTR vlist,
+ VARPTR clist,char *pinput);
+ static void init_varlist(VARPTR vlist);
++static void init_sig(void);
+ static void var_copy(VARPTR dest,VARPTR source);
+ static int print_help(FILE *stream,int extended,int page,char *s);
+ static int more(char *text,char *input,int pause);
+@@ -143,6 +147,8 @@
+
+
+ init_varlist(vlist);
++ initialize_readline();
++ init_sig();
+ wdir[0]=EOS;
+ rpath[0]=EOS;
+ setobase(10);
+@@ -462,6 +468,7 @@
+ if (input[m0]!='?')
+ {
+ evaluate(&input[m0],showout,vlist,clist);
++ init_sig();
+ break;
+ }
+ if (!strcmp(&input[m0],"?"))
+@@ -565,6 +572,24 @@
+ vlist[i].name[0]=EOS;
+ }
+
++static void ignore_fpe(void)
++{
++ printf("Floating point exception... ignore result!\n");
++ signal(SIGFPE, SIG_IGN);
++}
++
++/*
++** init_sig()
++**
++** initialize signal handler for floating point exceptions
++**
++*/
++
++static void init_sig(void)
++{
++ signal(SIGFPE, ignore_fpe);
++}
++
+ /*
+ ** var_copy(VARPTR dest,VARPTR source)
+ **
+@@ -839,24 +864,89 @@
+ s[j+1]=EOS;
+ }
+
++char *
++complete_consts (char *text, int state)
++{
++ static int i = 0, j = 0;
++
++ if (state == 0) {
++ i = 0;
++ j = 0;
++ }
++
++ while (i<MAXC) {
++ if (strncmp (clist[i].name, text, strlen(text)) == 0)
++ return strdup(clist[i++].name);
++ else
++ i++;
++ }
+
+-static int nextline(char *s,FILE *stream)
+-
++ while (j<NUMFUNCS) {
++ if (strncmp (flist[j].name, text, strlen(text)) == 0)
++ return strdup(flist[j++].name);
++ else
++ j++;
++ }
++
++ return NULL;
++}
++
++int initialize_readline ()
++{
++ /* Allow conditional parsing of the ~/.inputrc file. */
++ rl_readline_name = "Eval";
++
++ rl_completion_entry_function = (Function *)complete_consts;
++}
++
++/* A static variable for holding the line. */
++static char *line_read = (char *)NULL;
++
++/* Read a string, and return a pointer to it. Returns NULL on EOF. */
++char *
++do_gets ()
++{
++ /* If the buffer has already been allocated, return the memory
++ to the free pool. */
++ if (line_read != (char *)NULL)
+ {
+- while (1)
+-
+- {
+- if (stream==stdin)
+- printf("%s",PROMPT);
+- if (fgets(s,MAXINPUT,stream)==NULL)
+- return(0);
+- fixup(s);
+- if (s[0]!=';')
+- break;
+- }
+- return(1);
++ free (line_read);
++ line_read = (char *)NULL;
+ }
+
++ /* Get a line from the user. */
++ line_read = readline (PROMPT);
++
++ /* If the line has any text in it, save it on the history. */
++ if (line_read && *line_read)
++ add_history (line_read);
++
++ return (line_read);
++}
++
++
++static int nextline(char *s,FILE *stream)
++
++{
++ while (1)
++
++ {
++ if (stream==stdin) {
++ if (do_gets() == NULL)
++ return 0;
++ else
++ strncpy(s, line_read, MAXINPUT);
++ }
++ else
++ if (fgets(s,MAXINPUT,stream)==NULL)
++ return(0);
++ fixup(s);
++ if (s[0]!=';')
++ break;
++ }
++ return(1);
++}
++
+
+ static void close_temp(int showout)
+