]> git.lyx.org Git - lyx.git/blobdiff - src/lyxserver.C
better latin3&4 support
[lyx.git] / src / lyxserver.C
index 1760a0f6186ffe6384b23361e7d91917c3f0110b..0133d1abc354a9311bcc112ac2ba55c77a42bd65 100644 (file)
@@ -1,11 +1,10 @@
-// -*- C++ -*-
 /* This file is part of
  * ====================================================== 
  * 
  *           LyX, The Document Processor
  *        
  *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+ *           Copyright 1995-2001 The LyX Team.
  *
  * ====================================================== */
 
@@ -37,7 +36,6 @@
 
 #include <config.h>
 
-#include <cstring>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #endif
 
 #include "lyxserver.h"
-#include "lyxfunc.h"
 #include "lyx_main.h"
 #include "debug.h"
 #include "LyXAction.h"
+#include "lyxfunc.h"
 #include "support/lstrings.h"
 #include "support/lyxlib.h"
 
@@ -72,7 +70,7 @@ using std::endl;
 // 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 ) {
+int mkfifo(char const * __path, mode_t __mode) {
         return 0;
 }
 #endif
@@ -82,14 +80,24 @@ int mkfifo(char const * __path, mode_t __mode ) {
 
 extern LyXAction lyxaction;
 
-// C wrapper
-extern "C" void C_LyXComm_callback(int fd, void *v);
+
+extern "C" {
+       
+       // C wrapper
+       static
+       void C_LyXComm_callback(int fd, void *v)
+       {
+               LyXComm::callback(fd, v);
+       }
+
+}
 
 
 // LyXComm class
- // Open pipes
-void LyXComm::openConnection() {
+
+// Open pipes
+void LyXComm::openConnection()
+{
        lyxerr[Debug::LYXSERVER] << "LyXComm: Opening connection" << endl;
        
        // If we are up, that's an error
@@ -114,10 +122,11 @@ void LyXComm::openConnection() {
        // The current emx implementation of access() won't work with pipes.
        rc = DosCreateNPipe(tmp.c_str(), &fd, NP_ACCESS_INBOUND,
                NP_NOWAIT|0x01, 0600, 0600, 0);
-       if (rc == ERROR_PIPE_BUSY) {
+       if (rc == ERROR_PIPE_BUSY)
 #else
-       if (::access(tmp.c_str(), F_OK) == 0) {
+       if (::access(tmp.c_str(), F_OK) == 0)
 #endif
+       {
                lyxerr << "LyXComm: Pipe " << tmp << " already exists.\n"
                       << "If no other LyX program is active, please delete"
                        " the pipe by hand and try again." << endl;
@@ -162,13 +171,14 @@ void LyXComm::openConnection() {
        tmp = pipename + ".out";
        
 #ifndef __EMX__       
-       if (::access(tmp.c_str(), F_OK) == 0) {
+       if (::access(tmp.c_str(), F_OK) == 0)
 #else
        rc = DosCreateNPipe(tmp.c_str(), &fd, NP_ACCESS_DUPLEX,
                NP_NOWAIT|0x01, 0600, 0600, 0);
 
-       if (rc == ERROR_PIPE_BUSY) {
+       if (rc == ERROR_PIPE_BUSY)
 #endif
+       {
                lyxerr << "LyXComm: Pipe " << tmp << " already exists.\n"
                       << "If no other LyX program is active, please delete"
                        " the pipe by hand and try again." << endl;
@@ -217,14 +227,16 @@ void LyXComm::openConnection() {
                lyxerr << "LyXComm: Could not set flags on pipe " << tmp
                       << '\n' << strerror(errno) << endl;
                return;
-       };
+       }
        // We made it!
        ready = true;
        lyxerr[Debug::LYXSERVER] << "LyXComm: Connection established" << endl;
 }
+
+       
 /// Close pipes
-void LyXComm::closeConnection() {
+void LyXComm::closeConnection()
+{
 #ifdef __EMX__
        APIRET rc;
        int errnum;
@@ -240,7 +252,7 @@ void LyXComm::closeConnection() {
                return;
        }
  
-       if(infd > -1) {
+       if (infd > -1) {
                fl_remove_io_callback(infd, FL_READ, C_LyXComm_callback);
  
                string tmp = pipename + ".in";
@@ -264,7 +276,7 @@ void LyXComm::closeConnection() {
                };
 #endif
        }
-       if(outfd > -1) {
+       if (outfd > -1) {
                string tmp = pipename + ".out";
 #ifdef __EMX__
                rc = DosDisConnectNPipe(outfd);
@@ -288,7 +300,8 @@ void LyXComm::closeConnection() {
        }
        ready = false;
 }
+
+
 // Receives messages and sends then to client
 void LyXComm::callback(int fd, void *v)
 {
@@ -309,7 +322,7 @@ void LyXComm::callback(int fd, void *v)
        // the single = is intended here.
        while((status = read(fd, charbuf, CMDBUFLEN-1)))
        {// break and return in loop
-               if(status > 0) // got something
+               if (status > 0) // got something
                {
                        charbuf[status]= '\0'; // turn it into a c string
                        lsbuf += strip(charbuf, '\r');
@@ -325,22 +338,22 @@ void LyXComm::callback(int fd, void *v)
                                        << "LyXComm: status:" << status
                                        << ", lsbuf:" << lsbuf 
                                        << ", cmd:" << cmd << endl;
-                               if(!cmd.empty())
+                               if (!cmd.empty())
                                        c->clientcb(c->client, cmd); 
                                        //\n or not \n?
                        }
                }
-               if(errno == EAGAIN)
+               if (errno == EAGAIN)
                {  // EAGAIN is not really an error , it means we're
                   // only reading too fast for the writing process on
                   // the other end of the pipe. 
                        errno = 0;
                        return; // up to libforms select-loop (*crunch*)
                }
-               if(errno != 0 )
+               if (errno != 0 )
                {
                        lyxerr << "LyXComm: " << strerror(errno) << endl;
-                       if(!lsbuf.empty())
+                       if (!lsbuf.empty())
                        {
                                lyxerr << "LyxComm: truncated command: " 
                                       << lsbuf << endl;
@@ -354,13 +367,9 @@ void LyXComm::callback(int fd, void *v)
        errno= 0;
 }
 
-extern "C" void C_LyXComm_callback(int fd, void *v)
-{
-       LyXComm::callback(fd, v);
-}
 
-void LyXComm::send(string const & msg) {
+void LyXComm::send(string const & msg)
+{
        if (msg.empty()) {
                lyxerr << "LyXComm: Request to send empty string. Ignoring."
                       << endl;
@@ -432,9 +441,9 @@ void LyXServer::callback(LyXServer * serv, string const & msg)
        while(*p) {
                // --- 1. check 'header' ---
 
-               if (strncmp(p, "LYXSRV:", 7) == 0) {
+               if (compare(p, "LYXSRV:", 7) == 0) {
                        server_only = true; 
-               } else if(0!= strncmp(p, "LYXCMD:", 7)) {
+               } else if (0 != compare(p, "LYXCMD:", 7)) {
                        lyxerr << "LyXServer: Unknown request" << endl;
                        return;
                }
@@ -444,8 +453,8 @@ void LyXServer::callback(LyXServer * serv, string const & msg)
                string client;
                while(*p && *p != ':')
                        client += char(*p++);
-               if(*p == ':') ++p;
-               if(!*p) return;
+               if (*p == ':') ++p;
+               if (!*p) return;
                
                // --- 3. get function name ---
                string cmd;
@@ -454,10 +463,10 @@ void LyXServer::callback(LyXServer * serv, string const & msg)
                
                // --- 4. parse the argument ---
                string arg;
-               if(!server_only && *p == ':' && *(++p)) {
+               if (!server_only && *p == ':' && *(++p)) {
                        while(*p && *p != '\n')
                                arg += char(*p++);
-                       if(*p) ++p;
+                       if (*p) ++p;
                }
  
                lyxerr[Debug::LYXSERVER]
@@ -473,7 +482,7 @@ void LyXServer::callback(LyXServer * serv, string const & msg)
                        // 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;
@@ -529,7 +538,7 @@ void LyXServer::callback(LyXServer * serv, string const & msg)
                        string rval, buf;
                    
                        if (action>= 0) {
-                               rval = serv->func->Dispatch(action, arg);
+                               rval = serv->func->dispatch(action, arg);
                        } else {
                                rval = "Unknown command";
                        }