diff options
Diffstat (limited to 'math/eval/files/patch-ac')
-rw-r--r-- | math/eval/files/patch-ac | 166 |
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) + |