diff options
author | Karl Berry <karl@freefriends.org> | 2012-05-31 00:02:26 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-05-31 00:02:26 +0000 |
commit | 19fc9fd9a26973d87fad437ce549ffaba479df54 (patch) | |
tree | f40a9d2592b3cf827970c8bf54a1eebf9cc8f9c0 /Build/source/utils/asymptote/interact.cc | |
parent | 24b3bac312553b2cc61e94fda581aba311967f5c (diff) |
asy 2.16 sources
git-svn-id: svn://tug.org/texlive/trunk@26734 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/interact.cc')
-rw-r--r-- | Build/source/utils/asymptote/interact.cc | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/Build/source/utils/asymptote/interact.cc b/Build/source/utils/asymptote/interact.cc index dd0bfd68a20..7f30b7034bc 100644 --- a/Build/source/utils/asymptote/interact.cc +++ b/Build/source/utils/asymptote/interact.cc @@ -72,7 +72,7 @@ void init_completion() { char *(*Readline)(const char *prompt); -char *verbatimreadline(const char *prompt) +char *readverbatimline(const char *prompt) { if(!cin.good()) {cin.clear(); return NULL;} cout << prompt; @@ -81,14 +81,34 @@ char *verbatimreadline(const char *prompt) return StrdupMalloc(s); } +FILE *fin=NULL; + +char *readpipeline(const char *prompt) +{ + const int max_size=256; + static char buf[max_size]; + ostringstream s; + do { + if(fgets(buf,max_size-1,fin) == NULL) break; + s << buf; + } while(buf[strlen(buf)-1] != '\n'); + return StrdupMalloc(s.str()); +} + void pre_readline() { + int fd=intcast(settings::getSetting<Int>("inpipe")); + if(fd >= 0) { + if(!fin) fin=fdopen(fd,"r"); + Readline=readpipeline; + } else { #if defined(HAVE_LIBREADLINE) && defined(HAVE_LIBCURSES) - if(tty) { - Readline=readline; - } else + if(tty) { + Readline=readline; + } else #endif - Readline=verbatimreadline; + Readline=readverbatimline; + } } void init_interactive() |