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

Reply via email to