#include #include "tlmplib.h" #include "tlmplib.m" struct _F_walkpopen_private { _F_walkpopen__v1 *c; }; void _F_walkpopen::close_input() { priv->c->close_input(); } int _F_walkpopen::oneerr(const char *, const char *, FILE *) { return 0; } void _F_walkpopen::start(FILE *, bool &) { } void _F_walkpopen::end() { } void _F_walkpopen::empty(const char *) { } void _F_walkpopen::fail(const char *cmd) { tlmp_error (MSG_R(E_CANTEXEC),cmd); } void _F_walkpopen::init(FILE *, bool &) { } static int walkpopen_common( _F_walkpopen &c, POPEN &pop, int timeout, const char *command) { _F_walkpopen_private priv; glocal _F_walkpopen *c = &c; c.priv = &priv; int ret = (pop,timeout,command); glocal.c->empty(command); return glocal.c->oneline (line,noline,fout); return glocal.c->oneerr (line, command, fout); glocal.c->start (fout, end); glocal.c->end (); glocal.c->fail(command); glocal.c->priv->c = this; glocal.c->init (fout, end); return ret; } int walkpopen ( _F_walkpopen &c, const char *command, int timeout) { POPEN pop (command); return walkpopen_common (c,pop,timeout,command); } int walkpopen ( _F_walkpopen &c, const char *command, const char *arg, int timeout) { POPEN pop (command,arg); SSTRING full; full.setfromf ("%s %s",command,arg); return walkpopen_common (c,pop,timeout,full.get()); } int walkpopen ( _F_walkpopen &c, const char *command, int timeout, bool user) { if (user){ POPENUSER pop (command); return walkpopen_common (c,pop,timeout,command); }else{ POPEN pop (command); return walkpopen_common (c,pop,timeout,command); } }