// -*- C++ -*-
/* This file is part of
- * ======================================================
+ * ======================================================
*
* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
* Copyright 1995-1999 The LyX Team.
*
- * ======================================================*/
+ * ====================================================== */
/**
Docu : To use the lyxserver define the name of the pipe in your
extern LyXAction lyxaction;
+// C wrapper
+extern "C" void C_LyXComm_callback(int fd, void *v);
+
+
// LyXComm class
// Open pipes
rc = DosConnectNPipe(fd);
if (rc != NO_ERROR && rc != ERROR_PIPE_NOT_CONNECTED) {
errnum = TranslateOS2Error(rc);
- lyxerr <<"LyXComm: Could not create pipe " + tmp);
- lyxerr <<strerror(errnum);
+ lyxerr <<"LyXComm: Could not create pipe " << tmp
+ << strerror(errnum) << endl;
return;
};
// Imported handles can be used both with OS/2 APIs and emx
<< strerror(errno) << endl;
return;
}
- fl_add_io_callback(infd, FL_READ, callback, (void*)this);
+ fl_add_io_callback(infd, FL_READ, C_LyXComm_callback, (void*)this);
// --- prepare output pipe ---------------------------------------
}
if(infd > -1) {
- fl_remove_io_callback(infd, FL_READ, callback);
+ fl_remove_io_callback(infd, FL_READ, C_LyXComm_callback);
string tmp = pipename + ".in";
#ifdef __EMX__ // Notify the operating system.
errno = 0;
int status;
// the single = is intended here.
- while((status = read(fd,charbuf,CMDBUFLEN-1)))
+ while((status = read(fd, charbuf, CMDBUFLEN-1)))
{// break and return in loop
if(status > 0) // got something
{
- charbuf[status]='\0'; // turn it into a c string
+ charbuf[status]= '\0'; // turn it into a c string
lsbuf += strip(charbuf, '\r');
// commit any commands read
while(lsbuf.find('\n') != string::npos) // while still
{
// split() grabs the entire string if
// the delim /wasn't/ found. ?:-P
- lsbuf=split(lsbuf, cmd,'\n');
+ lsbuf= split(lsbuf, cmd,'\n');
lyxerr[Debug::LYXSERVER]
<< "LyXComm: status:" << status
<< ", lsbuf:" << lsbuf
{
lyxerr << "LyxComm: truncated command: "
<< lsbuf << endl;
- lsbuf.erase();
+ lsbuf.clear();
}
break; // reset connection
}
}
c->closeConnection();
c->openConnection();
- errno=0;
+ errno= 0;
}
+
+extern "C" void C_LyXComm_callback(int fd, void *v)
+{
+ LyXComm::callback(fd, v);
+}
+
void LyXComm::send(string const & msg) {
if (msg.empty()) {
rc = DosResetBuffer(outfd); // To avoid synchronization problems.
if (rc != NO_ERROR) {
errnum = TranslateOS2Error(rc);
- lyxerr <<"LyXComm: Message could not be flushed: " +msg);
- lyxerr <<strerror(errnum));
+ lyxerr << "LyXComm: Message could not be flushed: " << msg
+ << '\n' << strerror(errnum) << endl;
}
#endif
}
// modified june 1999 by stefano@zool.su.se to send as many bye
// messages as there are clients, each with client's name.
string message;
- for (int i=0; i<numclients; i++) {
+ for (int i= 0; i<numclients; i++) {
message = "LYXSRV:" + clients[i] + ":bye\n";
pipes.send(message);
}
bool server_only = false;
while(*p) {
// --- 1. check 'header' ---
- if (strncmp(p, "LYXSRV:", 7)==0) {
+ if (strncmp(p, "LYXSRV:", 7) == 0) {
server_only = true;
- } else if(0!=strncmp(p, "LYXCMD:", 7)) {
+ } else if(0!= strncmp(p, "LYXCMD:", 7)) {
lyxerr << "LyXServer: Unknown request" << endl;
return;
}
// we are listening.
if (cmd == "hello") {
// One more client
- if(serv->numclients==MAX_CLIENTS){ //paranoid check
+ if(serv->numclients == MAX_CLIENTS){ //paranoid check
lyxerr[Debug::LYXSERVER]
<< "LyXServer: too many clients..."
<< endl;
return;
}
- int i=0; //find place in clients[]
+ int i= 0; //find place in clients[]
while (!serv->clients[i].empty()
&& i<serv->numclients)
i++;
<< client << endl;
serv->pipes.send(buf);
} else if (cmd == "bye") {
- // If clients==0 maybe we should reset the pipes
+ // If clients == 0 maybe we should reset the pipes
// to prevent fake callbacks
int i; //look if client is registered
- for (i=0; i<serv->numclients; i++) {
+ for (i= 0; i<serv->numclients; i++) {
if (serv->clients[i] == client) break;
}
if (i<serv->numclients) {
serv->numclients--;
- serv->clients[i].erase();
+ serv->clients[i].clear();
lyxerr[Debug::LYXSERVER]
<< "LyXServer: Client "
<< client << " said goodbye"
//int action = -1;
string rval, buf;
- if (action>=0) {
+ if (action>= 0) {
rval = serv->func->Dispatch(action, arg.c_str());
} else {
rval = "Unknown command";