#ifndef SYSTEMCALL_H
#define SYSTEMCALL_H
-#include <string>
-#include <QObject>
-
-class QProcess;
+#include "strfwd.h"
namespace lyx {
namespace support {
public:
/// whether to wait for completion
enum Starttype {
- Wait, //< wait for completion before returning from startscript()
- DontWait //< don't wait for completion
+ Wait, //< wait for completion before returning from startscript()
+ WaitLoop, //< wait, but check occasionally for cancellation
+ DontWait //< don't wait for completion
};
- /** Start child process.
- * The string "what" contains a commandline with arguments separated
- * by spaces.
- */
- int startscript(Starttype how, std::string const & what);
-};
-
-
-/**
- * Outputs to the console terminal the line buffered standard output and
- * error of a spawned process when there is a controlling terminal and
- * stdout/stderr have not been redirected.
- */
-class ConOut : public QObject
-{
- Q_OBJECT
-public:
- ConOut(QProcess * proc);
- ~ConOut();
-
- /// Should the standard output be displayed?
- void showout() { showout_ = true; }
+ // enum values chosen hopefully not to conflict with ordinary return values
+ enum ReturnValue {
+ OK = 0,
+ NOSTART = 1001,
+ ERROR = 2001,
+ TIMEOUT = 4001,
+ KILLED = 9001
+ };
- /// Should the standard error be displayed?
- void showerr() { showerr_ = true; }
-private:
- /// Pointer to the process to monitor.
- QProcess * proc_;
- /// Index to the standard output buffer.
- size_t outindex_;
- /// Index to the standard error buffer.
- size_t errindex_;
- /// Size of buffers.
- static size_t const bufsize_ = 200;
- /// Standard output buffer.
- char outdata_[bufsize_];
- /// Standard error buffer.
- char errdata_[bufsize_];
- ///
- bool showout_;
- ///
- bool showerr_;
+ // Kill the process which is running at time being
+ static void killscript();
-public Q_SLOTS:
- void stdOut();
- void stdErr();
+ /** Start child process.
+ * The string "what" contains a commandline with arguments separated
+ * by spaces and encoded in the filesystem encoding. "$$s" will be
+ * replaced accordingly by commandPrep(). The string "path" contains
+ * the path to be prepended to the TEXINPUTS environment variable
+ * encoded in utf-8. Similarly for the string "lpath" that, if not
+ * empty, specifies an additional directory to be added to TEXINPUTS
+ * but after "path". Unset "process_events" in case UI should be
+ * blocked while processing the external command.
+ */
+ int startscript(Starttype how, std::string const & what,
+ std::string const & path = empty_string(),
+ std::string const & lpath = empty_string(),
+ bool process_events = false);
};
} // namespace support