]> git.lyx.org Git - features.git/commitdiff
Move the Cygwin specializations into their own file.
authorAngus Leeming <leeming@lyx.org>
Fri, 21 Jan 2005 22:08:59 +0000 (22:08 +0000)
committerAngus Leeming <leeming@lyx.org>
Fri, 21 Jan 2005 22:08:59 +0000 (22:08 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9521 a592a061-630c-0410-9148-cb99ea01b6c8

src/support/ChangeLog
src/support/os.C
src/support/os_cygwin.C [new file with mode: 0644]
src/support/os_win32.C

index ef5520c2fd436de8061f80c5f7204990ee93abec..458676285b697ba0bfc48fb265d82cce34291a52 100644 (file)
@@ -1,3 +1,10 @@
+2005-01-21  Angus Leeming   <leeming@lyx.org>
+
+       * os_cygwin.C, os_win32.C: strip the Cygwin-specific stuff out of
+       os_win32.C and give it its own file.
+
+       * os.C: #include "os_cygwin.C" if building on Cygwin.
+
 2005-01-20  Angus Leeming  <leeming@lyx.org>
 
        * lyxlib.h (float_equal): promote parameters to double.
index 2d44db8dd60bd046ad4712c9962e6e28704531ca..bab975c53dd74af79a8132582046b53f975d5ea0 100644 (file)
@@ -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"
diff --git a/src/support/os_cygwin.C b/src/support/os_cygwin.C
new file mode 100644 (file)
index 0000000..b864467
--- /dev/null
@@ -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 3ab477b41b1f83860d837b143985045a53517154..1559d61e36c1a1cee5bede442e637036782cba3b 100644 (file)
@@ -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.
  *
 
 #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 * argv[])
                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 const & p1, string const & p2)
 }
 
 
-#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