X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2FSystemcallPrivate.h;h=6ab479f73c329fd5b68a786b9cd6a608c478e9a2;hb=7b0f9d95248820bc70b820dd6b558de4a6713bae;hp=4fee2c698bce075604c8d9ee770475245ca66e85;hpb=aa613aaf010f1dd991222dbf1e83d51aa9f4b8a7;p=lyx.git diff --git a/src/support/SystemcallPrivate.h b/src/support/SystemcallPrivate.h index 4fee2c698b..6ab479f73c 100644 --- a/src/support/SystemcallPrivate.h +++ b/src/support/SystemcallPrivate.h @@ -13,9 +13,10 @@ #define SYSTEMCALLPRIVATE_H #include - #include +#include + namespace lyx { namespace support { @@ -23,80 +24,84 @@ class Systemcall; /** * Outputs to the console terminal the line buffered standard output and - * error of a spawned process when there is a controlling terminal and + * error of a spawned process when there is a controlling terminal and * stdout/stderr have not been redirected. */ class SystemcallPrivate : public QObject { Q_OBJECT + public: - SystemcallPrivate(const std::string& outfile); + SystemcallPrivate(std::string const & infile, std::string const & outfile, + std::string const & errfile); ~SystemcallPrivate(); - /// Should the standard output be displayed? - void setShowOut(bool val) { showout_ = val; } - - /// Should the standard error be displayed? - void setShowErr(bool val) { showerr_ = val; } - enum State { Starting, Running, Finished, - Error + Error, + Killed }; State state; bool waitWhile(State, bool processEvents, int timeout = -1); - void startProcess(const QString& cmd); - + void startProcess(QString const & cmd, std::string const & path, + std::string const & lpath, bool detach); + int exitCode(); QString errorMessage() const; QString exitStatusMessage() const; - void flush(); - QProcess* releaseProcess(); - + static void killProcess(QProcess * p); + // when true, kill any running script ASAP + static bool kill_script; + + +public Q_SLOTS: + void stdOut(); + void stdErr(); + void processError(QProcess::ProcessError); + void processStarted(); + void processFinished(int, QProcess::ExitStatus status); + + private: /// Pointer to the process to monitor. - QProcess * proc_; + QProcess * process_; + /// Index to the standard output buffer. - size_t outindex_; + size_t out_index_; /// Index to the standard error buffer. - size_t errindex_; + size_t err_index_; + /// + std::string in_file_; /// - std::string outfile; + std::string out_file_; + /// + std::string err_file_; + /// Size of buffers. - static size_t const bufsize_ = 200; + static size_t const buffer_size_ = 200; /// Standard output buffer. - char outdata_[bufsize_]; + char out_data_[buffer_size_]; /// Standard error buffer. - char errdata_[bufsize_]; - /// - bool showout_; - /// - bool showerr_; - bool process_events; + char err_data_[buffer_size_]; + QString cmd_; + bool process_events_; void waitAndProcessEvents(); void processEvents(); - void killProcess(); -public Q_SLOTS: - void stdOut(); - void stdErr(); - void processError(QProcess::ProcessError); - void processStarted(); - void processFinished(int, QProcess::ExitStatus status); - -Q_SIGNALS: - + /// returns false if we killed the process + /// actually returns Systemcall::ReturnValue + bool waitAndCheck(); }; } // namespace support