Jean-Marc mentioned sometime ago that a separate os_cygwin.C would probably
be a good idea. So here it is.
--
Angus
Index: src/support/os.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os.C,v
retrieving revision 1.7
diff -u -p -r1.7 os.C
--- src/support/os.C 14 Dec 2004 12:29:53 -0000 1.7
+++ src/support/os.C 21 Jan 2005 08:55:39 -0000
@@ -12,7 +12,9 @@
#ifdef __EMX__
#include "os_os2.C"
-#elif defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(_WIN32)
+#elif defined(__CYGWIN__) || defined(__CYGWIN32__)
+#include "os_cygwin.C"
+#elif defined(_WIN32)
#include "os_win32.C"
#else
#include "os_unix.C"
Index: src/support/os_cygwin.C
===================================================================
RCS file: src/support/os_cygwin.C
diff -N src/support/os_cygwin.C
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/support/os_cygwin.C 21 Jan 2005 08:55:39 -0000
@@ -0,0 +1,151 @@
+/**
+ * \file os_cygwin.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Ruurd A. Reitsma
+ * \author Claus Hentschel
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS.
+ *
+ * Various OS specific functions
+ */
+
+#include <config.h>
+
+#include "support/os.h"
+#include "support/lstrings.h"
+
+#include "debug.h"
+
+#include <windows.h>
+#include <io.h>
+
+#include <sys/cygwin.h>
+
+using std::endl;
+using std::string;
+
+
+namespace lyx {
+namespace support {
+namespace os {
+
+void os::init(int, char *[])
+{}
+
+
+string current_root()
+{
+ return string("/");
+}
+
+
+string::size_type common_path(string const & p1, string const & p2)
+{
+ string::size_type i = 0;
+ string::size_type p1_len = p1.length();
+ string::size_type p2_len = p2.length();
+ while (i < p1_len && i < p2_len && uppercase(p1[i]) == uppercase(p2[i]))
+ ++i;
+ if ((i < p1_len && i < p2_len)
+ || (i < p1_len && p1[i] != '/' && i == p2_len)
+ || (i < p2_len && p2[i] != '/' && i == p1_len))
+ {
+ if (i)
+ --i; // here was the last match
+ while (i && p1[i] != '/')
+ --i;
+ }
+ return i;
+}
+
+
+namespace {
+
+bool cygwin_path_fix_ = false;
+
+} // namespace anon
+
+
+string external_path(string const & p)
+{
+ string dos_path;
+
+ // Translate from cygwin path syntax to dos path syntax
+ if (cygwin_path_fix_ && is_absolute_path(p)) {
+ char dp[PATH_MAX];
+ cygwin_conv_to_full_win32_path(p.c_str(), dp);
+ dos_path = !dp ? "" : dp;
+ }
+
+ else return p;
+
+ //No backslashes in LaTeX files
+ dos_path = subst(dos_path,'\\','/');
+
+ lyxerr[Debug::LATEX]
+ << "<Cygwin path correction> ["
+ << p << "]->>["
+ << dos_path << ']' << endl;
+ return dos_path;
+}
+
+
+string internal_path(string const & p)
+{
+ char posix_path[PATH_MAX];
+ posix_path[0] = '\0';
+ cygwin_conv_to_posix_path(p.c_str(), posix_path);
+ return posix_path;
+}
+
+
+bool is_absolute_path(string const & p)
+{
+ if (p.empty())
+ return false;
+
+ bool isDosPath = (p.length() > 1 && p[1] == ':');
+ bool isUnixPath = (p[0] == '/');
+
+ return isDosPath || isUnixPath;
+}
+
+
+// returns a string suitable to be passed to popen when
+// reading a pipe
+char const * popen_read_mode()
+{
+ return "r";
+}
+
+
+string const & nulldev()
+{
+ static string const nulldev_ = "/dev/null";
+ return nulldev_;
+}
+
+
+shell_type shell()
+{
+ return UNIX;
+}
+
+
+char path_separator()
+{
+ return ':';
+}
+
+
+void cygwin_path_fix(bool use_cygwin_paths)
+{
+ use_cygwin_paths_ = use_cygwin_paths;
+}
+
+} // namespace os
+} // namespace support
+} // namespace lyx
Index: src/support/os_win32.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_win32.C,v
retrieving revision 1.26
diff -u -p -r1.26 os_win32.C
--- src/support/os_win32.C 18 Jan 2005 09:48:08 -0000 1.26
+++ src/support/os_win32.C 21 Jan 2005 08:55:39 -0000
@@ -4,6 +4,8 @@
* Licence details can be found in the file COPYING.
*
* \author Ruurd A. Reitsma
+ * \author Claus Hentschel
+ * \author Angus Leeming
*
* Full author contact details are available in file CREDITS.
*
@@ -19,13 +21,7 @@
#include <windows.h>
#include <io.h>
-
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
-# include <sys/cygwin.h>
-
-#elif defined(_WIN32)
-# include <direct.h> // _getdrive
-#endif
+#include <direct.h> // _getdrive
using std::endl;
using std::string;
@@ -37,7 +33,6 @@ namespace os {
void os::init(int /* argc */, char * argv[])
{
-#ifdef _WIN32
/* Note from Angus, 17 Jan 2005:
*
* The code below is taken verbatim from Ruurd's original patch
@@ -112,20 +107,14 @@ void os::init(int /* argc */, char * arg
if ( hwndFound != NULL)
ShowWindow( hwndFound, SW_HIDE);
}
-#endif
}
string current_root()
{
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
- return string("/");
-
-#else
// _getdrive returns the current drive (1=A, 2=B, and so on).
char const drive = ::_getdrive() + 'A' - 1;
return string(1, drive) + ":/";
-#endif
}
@@ -149,31 +138,9 @@ string::size_type common_path(string con
}
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
-namespace {
-
-bool cygwin_path_fix_ = false;
-
-} // namespace anon
-#endif
-
-
string external_path(string const & p)
{
- string dos_path;
-
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
- // Translate from cygwin path syntax to dos path syntax
- if (cygwin_path_fix_ && is_absolute_path(p)) {
- char dp[PATH_MAX];
- cygwin_conv_to_full_win32_path(p.c_str(), dp);
- dos_path = !dp ? "" : dp;
- }
-
- else return p;
-#else // regular Win32
- dos_path = p;
-#endif
+ string dos_path = p;
//No backslashes in LaTeX files
dos_path = subst(dos_path,'\\','/');
@@ -192,14 +159,7 @@ string external_path(string const & p)
// the Win32/DOS pathnames into Cygwin pathnames.
string internal_path(string const & p)
{
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
- char posix_path[PATH_MAX];
- posix_path[0] = '\0';
- cygwin_conv_to_posix_path(p.c_str(), posix_path);
- return posix_path;
-#else
return subst(p,"\\","/");
-#endif
}
@@ -231,44 +191,25 @@ char const * popen_read_mode()
string const & nulldev()
{
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
- static string const nulldev_ = "/dev/null";
-#else
static string const nulldev_ = "nul";
-#endif
return nulldev_;
}
shell_type shell()
{
-#if defined(__CYGWIN__) || defined(__CYGWIN32__)
- return UNIX;
-#else
return CMD_EXE;
-#endif
}
char path_separator()
{
-#if defined (_WIN32)
return ';';
-#else // Cygwin
- return ':';
-#endif
}
-void cygwin_path_fix(bool use_cygwin_paths)
-{
-#if defined (_WIN32)
- // Silence warning.
- (void)use_cygwin_paths;
-#else // Cygwin
- use_cygwin_paths_ = use_cygwin_paths;
-#endif
-}
+void cygwin_path_fix(bool)
+{}
} // namespace os
} // namespace support