From: Angus Leeming Date: Fri, 21 Jan 2005 22:08:59 +0000 (+0000) Subject: Move the Cygwin specializations into their own file. X-Git-Tag: 1.6.10~14625 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=13f64497690e900cdf207222c29a4540c74dccbc;p=features.git Move the Cygwin specializations into their own file. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9521 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/support/ChangeLog b/src/support/ChangeLog index ef5520c2fd..458676285b 100644 --- a/src/support/ChangeLog +++ b/src/support/ChangeLog @@ -1,3 +1,10 @@ +2005-01-21 Angus Leeming + + * 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 * lyxlib.h (float_equal): promote parameters to double. diff --git a/src/support/os.C b/src/support/os.C index 2d44db8dd6..bab975c53d 100644 --- a/src/support/os.C +++ b/src/support/os.C @@ -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 index 0000000000..b8644672c8 --- /dev/null +++ b/src/support/os_cygwin.C @@ -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 + +#include "support/os.h" +#include "support/lstrings.h" + +#include "debug.h" + +#include +#include + +#include + +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] + << " [" + << 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 diff --git a/src/support/os_win32.C b/src/support/os_win32.C index 3ab477b41b..1559d61e36 100644 --- a/src/support/os_win32.C +++ b/src/support/os_win32.C @@ -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 #include - -#if defined(__CYGWIN__) || defined(__CYGWIN32__) -# include - -#elif defined(_WIN32) -# include // _getdrive -#endif +#include // _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