#include <config.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <cerrno>
-
#include "lyxserver.h"
-#include "lyx_main.h"
#include "debug.h"
+#include "funcrequest.h"
+#include "LyXAction.h"
#include "lyxfunc.h"
#include "support/lstrings.h"
#include "support/lyxlib.h"
#include "frontends/lyx_gui.h"
-#ifdef __EMX__
-#include <cstdlib>
-#include <io.h>
-#define OS2EMX_PLAIN_CHAR
-#define INCL_DOSNMPIPES
-#define INCL_DOSERRORS
-#include <os2.h>
-#include "support/os2_errortable.h"
+#include <boost/bind.hpp>
+
+#include <cerrno>
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
#endif
+#include <fcntl.h>
+#ifdef __EMX__
+# include <cstdlib>
+# include <io.h>
+# define OS2EMX_PLAIN_CHAR
+# define INCL_DOSNMPIPES
+# define INCL_DOSERRORS
+# include <os2.h>
+# include "support/os2_errortable.h"
+#endif
-using namespace lyx::support;
+using lyx::support::compare;
+using lyx::support::rtrim;
+using lyx::support::split;
+using lyx::support::unlink;
using std::endl;
+using std::string;
+
+
+#if !defined (HAVE_MKFIFO)
+// We provide a stub class that disables the lyxserver.
-// provide an empty mkfifo() if we do not have one. This disables the
-// lyxserver.
-#ifndef HAVE_MKFIFO
-int mkfifo(char const * __path, mode_t __mode) {
- return 0;
+void LyXComm::openConnection()
+{}
+
+
+void LyXComm::closeConnection()
+{}
+
+
+int LyXComm::startPipe(string const & filename, bool write)
+{
+ return -1;
}
-#endif
+
+
+void LyXComm::endPipe(int & fd, string const & filename, bool write)
+{}
+
+
+void LyXComm::emergencyCleanup()
+{}
+
+void LyXComm::read_ready()
+{}
+
+
+void LyXComm::send(string const & msg)
+{}
+
+
+#else // defined (HAVE_MKFIFO)
void LyXComm::openConnection()
ready = false;
}
+
int LyXComm::startPipe(string const & filename, bool write)
{
- int fd;
-
#ifdef __EMX__
HPIPE os2fd;
APIRET rc;
}
if (rc != NO_ERROR) {
- errnum = TranslateOS2Error(rc);
+ errnum = translateOS2Error(rc);
lyxerr <<"LyXComm: Could not create pipe " << filename
<< strerror(errnum) << endl;
return -1;
// Listen to it.
rc = DosConnectNPipe(os2fd);
if (rc != NO_ERROR && rc != ERROR_PIPE_NOT_CONNECTED) {
- errnum = TranslateOS2Error(rc);
+ errnum = translateOS2Error(rc);
lyxerr <<"LyXComm: Could not create pipe " << filename
<< strerror(errnum) << endl;
return -1;
};
// Imported handles can be used both with OS/2 APIs and emx
// library functions.
- fd = _imphandle(os2fd);
+ int const fd = _imphandle(os2fd);
#else
if (::access(filename.c_str(), F_OK) == 0) {
lyxerr << "LyXComm: Pipe " << filename << " already exists.\n"
<< strerror(errno) << endl;
return -1;
};
- fd = ::open(filename.c_str(), write ? (O_RDWR) : (O_RDONLY|O_NONBLOCK));
+ int const fd = ::open(filename.c_str(),
+ write ? (O_RDWR) : (O_RDONLY|O_NONBLOCK));
#endif
if (fd < 0) {
}
if (!write) {
- lyx_gui::set_read_callback(fd, this);
+ lyx_gui::register_socket_callback(fd, boost::bind(&LyXComm::read_ready, this));
}
return fd;
return;
if (!write) {
- lyx_gui::remove_read_callback(fd);
+ lyx_gui::unregister_socket_callback(fd);
}
#ifdef __EMX__
rc = DosDisConnectNPipe(fd);
if (rc != NO_ERROR) {
- errnum = TranslateOS2Error(rc);
+ errnum = translateOS2Error(rc);
lyxerr << "LyXComm: Could not disconnect pipe " << filename
<< '\n' << strerror(errnum) << endl;
return;
int errnum;
rc = DosResetBuffer(outfd); // To avoid synchronization problems.
if (rc != NO_ERROR) {
- errnum = TranslateOS2Error(rc);
+ errnum = translateOS2Error(rc);
lyxerr << "LyXComm: Message could not be flushed: " << msg
<< '\n' << strerror(errnum) << endl;
}
#endif
}
+#endif // defined (HAVE_MKFIFO)
+
+
+string const LyXComm::inPipeName() const
+{
+ return pipename + string(".in");
+}
+
+
+string const LyXComm::outPipeName() const
+{
+ return pipename + string(".out");
+}
+
// LyXServer class
// support currently. (Lgb)
- serv->func->dispatch(cmd + ' ' + arg);
+ serv->func->dispatch(FuncRequest(lyxaction.lookupFunc(cmd), arg));
string const rval = serv->func->getMessage();
//modified june 1999 stefano@zool.su.se: