Index: src/DepTable.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/DepTable.C,v retrieving revision 1.41 diff -u -r1.41 DepTable.C --- src/DepTable.C 2003/10/13 01:01:33 1.41 +++ src/DepTable.C 2005/02/17 18:19:16 @@ -26,7 +26,9 @@ #include #ifndef CXX_GLOBAL_CSTD +# ifndef _WIN32 using std::time; +# endif #endif using lyx::support::ltrim; Index: src/buffer.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/buffer.C,v retrieving revision 1.612 diff -u -r1.612 buffer.C --- src/buffer.C 2005/02/08 13:17:57 1.612 +++ src/buffer.C 2005/02/17 18:19:17 @@ -77,7 +77,11 @@ #include #include -#include +#ifdef _WIN32 +# include +#else +# include +#endif #include #include Index: src/cursor.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/cursor.C,v retrieving revision 1.122 diff -u -r1.122 cursor.C --- src/cursor.C 2005/02/15 17:34:53 1.122 +++ src/cursor.C 2005/02/17 18:19:18 @@ -58,7 +58,9 @@ using std::vector; using std::endl; #ifndef CXX_GLOBAL_CSTD +# ifndef _WIN32 using std::isalpha; +# endif #endif using std::min; using std::swap; Index: src/ispell.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/ispell.C,v retrieving revision 1.25 diff -u -r1.25 ispell.C --- src/ispell.C 2005/01/20 16:17:36 1.25 +++ src/ispell.C 2005/02/17 18:19:18 @@ -24,11 +24,17 @@ #include "support/forkedcall.h" +#ifdef _WIN32 +# include "support/os_win32.h" +#endif + // HP-UX 11.x doesn't have this header #ifdef HAVE_SYS_SELECT_H #include +#endif +#ifndef _WIN32 +# include #endif -#include using boost::shared_ptr; @@ -88,6 +94,7 @@ } // child process +#ifndef _WIN32 dup2(pipein[0], STDIN_FILENO); dup2(pipeout[1], STDOUT_FILENO); dup2(pipeerr[1], STDERR_FILENO); @@ -180,6 +187,7 @@ lyxerr << "LyX: Failed to start ispell!" << endl; _exit(0); +#endif } @@ -191,6 +199,7 @@ { lyxerr[Debug::GUI] << "Created ispell" << endl; +#ifndef _WIN32 // static due to the setvbuf. Ugly. static char o_buf[BUFSIZ]; @@ -275,6 +284,7 @@ close(pipeerr[1]); child_->kill(); child_.reset(0); +#endif } @@ -295,18 +305,23 @@ fclose(out); } +#ifndef _WIN32 close(pipein[0]); close(pipein[1]); close(pipeout[0]); close(pipeout[1]); close(pipeerr[0]); close(pipeerr[1]); +#endif delete [] str; } bool ISpell::select(bool & err_read) { +#ifdef _WIN32 + return false; +#else fd_set infds; struct timeval tv; int retval = 0; @@ -316,11 +331,15 @@ tv.tv_sec = 2; tv.tv_usec = 0; +#ifdef HAVE_SELECT retval = ::select(SELECT_TYPE_ARG1 (max(pipeout[0], pipeerr[0]) + 1), SELECT_TYPE_ARG234 (&infds), 0, 0, SELECT_TYPE_ARG5 (&tv)); +#else + retval = -1; +#endif // error if (retval <= 0) @@ -335,6 +354,7 @@ fgets(buf, BUFSIZ, in); err_read = false; return false; +#endif } Index: src/lyx_cb.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/lyx_cb.C,v retrieving revision 1.247 diff -u -r1.247 lyx_cb.C --- src/lyx_cb.C 2005/01/31 10:42:18 1.247 +++ src/lyx_cb.C 2005/02/17 18:19:19 @@ -44,6 +44,10 @@ #include "support/path.h" #include "support/systemcall.h" +#ifdef _WIN32 +# include "support/os_win32.h" // fork() +#endif + #include #include Index: src/lyxserver.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/lyxserver.C,v retrieving revision 1.60 diff -u -r1.60 lyxserver.C --- src/lyxserver.C 2005/02/15 11:04:40 1.60 +++ src/lyxserver.C 2005/02/17 18:19:19 @@ -54,6 +54,10 @@ #include #include +#ifdef _WIN32 +# include "support/os_win32.h" // F_SETFL, O_NONBLOCK, fcntl +#endif + #ifdef __EMX__ #include #include @@ -180,6 +184,8 @@ // Imported handles can be used both with OS/2 APIs and emx // library functions. int const fd = _imphandle(os2fd); +#elif defined(_WIN32) + int fd = -1; #else if (::access(filename.c_str(), F_OK) == 0) { lyxerr << "LyXComm: Pipe " << filename << " already exists.\n" @@ -235,10 +241,12 @@ } #endif +#ifndef _WIN32 if (::close(fd) < 0) { lyxerr << "LyXComm: Could not close pipe " << filename << '\n' << strerror(errno) << endl; } +#endif // OS/2 pipes are deleted automatically #ifndef __EMX__ @@ -274,7 +282,13 @@ errno = 0; int status; // the single = is intended here. - while ((status = ::read(infd, charbuf, charbuf_size - 1))) { + while ((status = +#ifndef _WIN32 + ::read(infd, charbuf, charbuf_size - 1) +#else + -1 +#endif + )) { if (status > 0) { charbuf[status] = '\0'; // turn it into a c string @@ -331,6 +345,9 @@ if (pipename.empty()) return; +#ifdef _WIN32 + return; +#else if (!ready) { lyxerr << "LyXComm: Pipes are closed. Could not send " << msg << endl; @@ -341,6 +358,7 @@ closeConnection(); openConnection(); } +#endif #ifdef __EMX__ APIRET rc; int errnum; Index: src/lyxsocket.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/lyxsocket.C,v retrieving revision 1.7 diff -u -r1.7 lyxsocket.C --- src/lyxsocket.C 2005/02/15 13:45:40 1.7 +++ src/lyxsocket.C 2005/02/17 18:19:20 @@ -69,7 +69,9 @@ LyXServerSocket::~LyXServerSocket() { lyx_gui::unregister_socket_callback(fd_); +#ifndef _WIN32 ::close(fd_); +#endif lyx::support::unlink(address_); lyxerr[Debug::LYXSERVER] << "lyx: Server socket quitting" << endl; } @@ -156,7 +158,11 @@ { string const linen(line + '\n'); int const size = linen.size(); +#ifndef _WIN32 int const written = ::write(fd_, linen.c_str(), size); +#else + int const written = -1; +#endif if (written < size) { // Allways mean end of connection. if ((written == -1) && (errno == EPIPE)) { // The program will also receive a SIGPIPE @@ -195,7 +201,9 @@ LyXDataSocket::~LyXDataSocket() { +#ifndef _WIN32 ::close(fd_); +#endif lyx_gui::unregister_socket_callback(fd_); lyxerr[Debug::LYXSERVER] << "lyx: Data socket " << fd_ << " quitting." @@ -217,7 +225,13 @@ int count; // read and store characters in buffer - while ((count = ::read(fd_, charbuf, charbuf_size - 1)) > 0) { + while ((count = +#ifndef _WIN32 + ::read(fd_, charbuf, charbuf_size - 1) +#else + 0 +#endif + ) > 0) { buffer_.append(charbuf, charbuf + count); } @@ -251,7 +265,11 @@ { string const linen(line + '\n'); int const size = linen.size(); +#ifndef _WIN32 int const written = ::write(fd_, linen.c_str(), size); +#else + int const written = -1; +#endif if (written < size) { // Allways mean end of connection. if ((written == -1) && (errno == EPIPE)) { // The program will also receive a SIGPIPE Index: src/client/client.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/client/client.C,v retrieving revision 1.7 diff -u -r1.7 client.C --- src/client/client.C 2005/01/20 15:38:13 1.7 +++ src/client/client.C 2005/02/17 18:19:20 @@ -25,12 +25,14 @@ # include #endif +#ifndef _WIN32 // select() -#include +# include // socket(), connect() -#include -#include +# include +# include +#endif // fcntl() #include Index: src/frontends/LyXView.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/LyXView.C,v retrieving revision 1.50 diff -u -r1.50 LyXView.C --- src/frontends/LyXView.C 2005/02/08 13:18:02 1.50 +++ src/frontends/LyXView.C 2005/02/17 18:19:20 @@ -39,7 +39,9 @@ #include -#include +#ifndef _WIN32 +# include +#endif #ifdef HAVE_UNISTD_H # include #endif Index: src/frontends/qt2/QLyXKeySym.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QLyXKeySym.C,v retrieving revision 1.32 diff -u -r1.32 QLyXKeySym.C --- src/frontends/qt2/QLyXKeySym.C 2004/07/07 09:32:19 1.32 +++ src/frontends/qt2/QLyXKeySym.C 2005/02/17 18:19:21 @@ -74,7 +74,7 @@ void initEncodings() { // when no document open - encoding_map[""] = QTextCodec::codecForLocale(); + encoding_map[std::string()] = QTextCodec::codecForLocale(); encoding_map["iso8859-1"] = QTextCodec::codecForName("ISO 8859-1"); encoding_map["iso8859-2"] = QTextCodec::codecForName("ISO 8859-2"); Index: src/support/filetools.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/filetools.C,v retrieving revision 1.206 diff -u -r1.206 filetools.C --- src/support/filetools.C 2005/02/15 13:45:40 1.206 +++ src/support/filetools.C 2005/02/17 18:19:24 @@ -1042,6 +1042,11 @@ cmd_ret const RunCommand(string const & cmd) { +#ifdef _WIN32 + // TODO: Implement this, or merge it into forkedcall. + // Used for lyx2lyx in buffer.C, echo in math_extern and kpse in this file + return make_pair(-1, string()); +#else // FIXME: replace all calls to RunCommand with ForkedCall // (if the output is not needed) or the code in ispell.C // (if the output is needed). @@ -1082,6 +1087,7 @@ sigprocmask(SIG_SETMASK, &oldMask, 0); return make_pair(pret, ret); +#endif } Index: src/support/forkedcall.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/forkedcall.C,v retrieving revision 1.23 diff -u -r1.23 forkedcall.C --- src/support/forkedcall.C 2005/02/03 14:55:33 1.23 +++ src/support/forkedcall.C 2005/02/17 18:19:24 @@ -30,6 +30,10 @@ #include "support/lyxlib.h" #include "support/filetools.h" #include "support/os.h" +#ifdef _WIN32 +#include "os_win32.h" +#include +#endif #include "debug.h" @@ -41,7 +45,9 @@ #include #include #include -#include +#ifndef _WIN32 +# include +#endif #ifdef HAVE_UNISTD_H # include #endif @@ -70,7 +76,9 @@ if (secs > 0) { new Murder(secs, pid); } else if (pid != 0) { +#ifdef SIGKILL lyx::support::kill(pid, SIGKILL); +#endif } } @@ -78,7 +86,9 @@ void kill() { if (pid_ != 0) { +#ifdef SIGKILL lyx::support::kill(pid_, SIGKILL); +#endif } lyxerr << "Killed " << pid_ << std::endl; delete this; @@ -152,6 +162,7 @@ if (!pid()) return false; +#ifndef _WIN32 // Un-UNIX like, but we don't have much use for // knowing if a zombie exists, so just reap it first. int waitstatus; @@ -160,6 +171,7 @@ // Racy of course, but it will do. if (lyx::support::kill(pid(), 0) && errno == ESRCH) return false; +#endif return true; } @@ -178,6 +190,7 @@ Murder::killItDead(0, pid()); } else { +#ifdef SIGHUP int ret = lyx::support::kill(pid(), SIGHUP); // The process is already dead if wait_for_death is false @@ -186,6 +199,7 @@ if (wait_for_death) { Murder::killItDead(tolerance, pid()); } +#endif } } @@ -195,6 +209,7 @@ { // We'll pretend that the child returns 1 on all error conditions. retval_ = 1; +#ifndef _WIN32 int status; bool wait = true; while (wait) { @@ -223,6 +238,7 @@ wait = false; } } +#endif return retval_; } @@ -311,7 +327,12 @@ lyxerr << '\t'<< *ait << '\n'; lyxerr << "" << std::endl; -#ifndef __EMX__ +#ifdef __EMX + pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND, + argv[0], &*argv.begin()); +#elif defined(_WIN32) + pid_t const cpid = spawnvp(_P_NOWAIT, argv[0], &*argv.begin()); +#else pid_t const cpid = ::fork(); if (cpid == 0) { // Child @@ -322,9 +343,6 @@ << strerror(errno) << endl; _exit(1); } -#else - pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND, - argv[0], &*argv.begin()); #endif if (cpid < 0) { Index: src/support/forkedcall.h =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/forkedcall.h,v retrieving revision 1.19 diff -u -r1.19 forkedcall.h --- src/support/forkedcall.h 2004/09/26 14:19:47 1.19 +++ src/support/forkedcall.h 2005/02/17 18:19:24 @@ -31,6 +31,10 @@ #include +#ifdef _WIN32 +typedef int pid_t; +#endif + namespace lyx { namespace support { Index: src/support/forkedcontr.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/forkedcontr.C,v retrieving revision 1.27 diff -u -r1.27 forkedcontr.C --- src/support/forkedcontr.C 2005/01/20 15:38:14 1.27 +++ src/support/forkedcontr.C 2005/02/17 18:19:24 @@ -19,14 +19,22 @@ #include "debug.h" +#ifdef _WIN32 +#include "os_win32.h" +#include +#endif + #include #include #include + #ifdef HAVE_UNISTD_H # include #endif -#include +#ifndef _WIN32 +# include +#endif using boost::bind; @@ -176,7 +184,9 @@ ForkedcallsController::Data & store = fcc.reaped_children[++fcc.current_child]; // Clean up the child process. +#ifndef _WIN32 store.pid = wait(&store.status); +#endif } } // namespace anon @@ -193,11 +203,12 @@ ForkedcallsController::ForkedcallsController() : reaped_children(50), current_child(-1) { +#ifndef _WIN32 signal(SIGCHLD, child_handler); - sigemptyset(&oldMask); sigemptyset(&newMask); sigaddset(&newMask, SIGCHLD); +#endif } @@ -206,7 +217,9 @@ // I want to print or something. ForkedcallsController::~ForkedcallsController() { +#ifndef _WIN32 signal(SIGCHLD, SIG_DFL); +#endif } @@ -215,6 +228,7 @@ forkedCalls.push_back(newcall.clone()); if (forkedCalls.size() > reaped_children.size()) { +#ifndef _WIN32 // Block the SIGCHLD signal. sigprocmask(SIG_BLOCK, &newMask, &oldMask); @@ -222,6 +236,7 @@ // Unblock the SIGCHLD signal and restore the old mask. sigprocmask(SIG_SETMASK, &oldMask, 0); +#endif } } @@ -255,8 +270,10 @@ if (current_child == -1) return; +#ifndef _WIN32 // Block the SIGCHLD signal. sigprocmask(SIG_BLOCK, &newMask, &oldMask); +#endif for (int i = 0; i != 1 + current_child; ++i) { Data & store = reaped_children[i]; @@ -312,8 +329,10 @@ // Reset the counter current_child = -1; +#ifndef _WIN32 // Unblock the SIGCHLD signal and restore the old mask. sigprocmask(SIG_SETMASK, &oldMask, 0); +#endif } } // namespace support Index: src/support/forkedcontr.h =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/forkedcontr.h,v retrieving revision 1.18 diff -u -r1.18 forkedcontr.h --- src/support/forkedcontr.h 2004/11/07 13:22:51 1.18 +++ src/support/forkedcontr.h 2005/02/17 18:19:24 @@ -19,7 +19,10 @@ #include #include -//#include // needed for pid_t +#ifdef _WIN32 +typedef int pid_t; +#endif +#include // needed for pid_t #include #include @@ -79,8 +82,10 @@ /// The child processes ListType forkedCalls; +#ifndef _WIN32 /// Used to block SIGCHLD signals. sigset_t newMask, oldMask; +#endif }; } // namespace support Index: src/support/os_win32.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/os_win32.C,v retrieving revision 1.27 diff -u -r1.27 os_win32.C --- src/support/os_win32.C 2005/01/21 22:08:59 1.27 +++ src/support/os_win32.C 2005/02/17 18:19:25 @@ -89,12 +89,14 @@ // Close the console when run (probably) // not run from command prompt char WindowTitle[1024]; - HWND hwndFound; - GetConsoleTitle(WindowTitle,1024); + if (GetConsoleTitle(WindowTitle, sizeof(WindowTitle)) == 0) { + // Could not get the title, so we just leave things as they are + return; + } if ((strcmp(WindowTitle, argv[0]) == 0) || - (strcmp(WindowTitle,"LyX") == 0)) { + (strcmp(WindowTitle, "LyX") == 0)) { // format a "unique" newWindowTitle - wsprintf(WindowTitle,"%d/%d", + wsprintf(WindowTitle, "%d/%d", GetTickCount(), GetCurrentProcessId()); // change current window title @@ -102,10 +104,11 @@ // ensure window title has been updated Sleep(40); // look for newWindowTitle - hwndFound=FindWindow(NULL, WindowTitle); + HWND hwndFound = FindWindow(NULL, WindowTitle); // If found, hide it - if ( hwndFound != NULL) + if ( hwndFound != NULL) { ShowWindow( hwndFound, SW_HIDE); + } } } Index: src/support/socktools.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/socktools.C,v retrieving revision 1.6 diff -u -r1.6 socktools.C --- src/support/socktools.C 2005/01/20 15:38:14 1.6 +++ src/support/socktools.C 2005/02/17 18:19:25 @@ -15,8 +15,10 @@ #include "debug.h" +#ifndef _WIN32 #include #include +#endif #include #ifdef HAVE_UNISTD_H # include @@ -48,6 +50,7 @@ // special file 'name' will be created in the filesystem. int listen(string const & name, int queue) { +#ifndef _WIN32 int fd; // File descriptor for the socket sockaddr_un addr; // Structure that hold the socket address @@ -105,14 +108,17 @@ lyx::support::unlink(name); return -1; } - return fd; +#else + return -1; +#endif } // Returns a file descriptor for a new connection from the socket // descriptor 'sd' (or -1 in case of error) int accept(int sd) { +#ifndef _WIN32 int fd; // Returns the new file descriptor or -1 in case of error @@ -132,6 +138,9 @@ return -1; } return fd; +#else + return -1; +#endif } } // namespace socktools Index: src/support/tempname.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/tempname.C,v retrieving revision 1.25 diff -u -r1.25 tempname.C --- src/support/tempname.C 2005/01/20 15:38:14 1.25 +++ src/support/tempname.C 2005/02/17 18:19:25 @@ -30,6 +30,10 @@ # include #endif +#ifdef _WIN32 +# include +#endif + using boost::scoped_array; using std::string; @@ -42,6 +46,9 @@ { #if defined(HAVE_MKSTEMP) return ::mkstemp(templ); +#elif defined(_WIN32) + ::_mktemp(templ); + return (int) ::fopen(templ, "w"); #elif defined(HAVE_MKTEMP) // This probably just barely works... ::mktemp(templ); @@ -58,7 +65,9 @@ { string const tmpdir(dir.empty() ? package().temp_dir() : dir); string tmpfl(AddName(tmpdir, mask)); +#ifndef _WIN32 tmpfl += convert(getpid()); +#endif tmpfl += "XXXXXX"; // The supposedly safe mkstemp version @@ -69,7 +78,11 @@ int const tmpf = make_tempfile(tmpl.get()); if (tmpf != -1) { string const t(tmpl.get()); +#ifdef _WIN32 + ::fclose((FILE *) tmpf); +#else ::close(tmpf); +#endif lyxerr[Debug::FILES] << "Temporary file `" << t << "' created." << endl; return t; Index: src/support/userinfo.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/support/userinfo.C,v retrieving revision 1.10 diff -u -r1.10 userinfo.C --- src/support/userinfo.C 2005/02/15 13:45:41 1.10 +++ src/support/userinfo.C 2005/02/17 18:19:25 @@ -15,7 +15,9 @@ #include -#include +#ifndef _WIN32 +# include +#endif #ifdef HAVE_UNISTD_H # include #endif @@ -28,6 +30,7 @@ string const user_name() { +#ifndef _WIN32 struct passwd * pw(getpwuid(geteuid())); BOOST_ASSERT(pw); @@ -35,6 +38,9 @@ if (name.empty()) name = pw->pw_name; return name; +#else + return "dummy"; +#endif }