-// os_unix.C
+/**
+ * \file os_unix.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Ruurd A. Reitsma
+ *
+ * Full author contact details are available in file CREDITS.
+ *
+ * Various OS specific functions
+ */
-// Various OS specific functions
#include <config.h>
-#include "os.h"
-#include "support/filetools.h"
-
-string os::binpath_ = string();
-string os::binname_ = string();
-string os::tmpdir_ = string();
-os::shell_type os::_shell = os::UNIX;
-unsigned long os::cp_ = 0;
-
-void os::init(int * /*argc*/, char ** argv[]) /* :cp_(0), _shell(os::UNIX) */ {
- static bool initialized = false;
-
- if (initialized)
- return;
-
- initialized = true;
- string tmp = *argv[0];
- binname_ = OnlyFilename(tmp);
- tmp = ExpandPath(tmp); // This expands ./ and ~/
- if (!AbsolutePath(tmp)) {
- string binsearchpath = GetEnvPath("PATH");
- // This will make "src/lyx" work always :-)
- binsearchpath += ";.";
- tmp = FileOpenSearch(binsearchpath, tmp);
- }
+#include "support/os.h"
- tmp = MakeAbsPath(OnlyPath(tmp));
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#endif
- // In case we are running in place and compiled with shared libraries
- if (suffixIs(tmp, "/.libs/"))
- tmp.erase(tmp.length()-6, string::npos);
- binpath_ = tmp;
-}
+using std::string;
-void os::warn(string /*mesg*/) {
- return;
-}
-string os::current_root() {
- return string("/");
+namespace lyx {
+namespace support {
+namespace os {
+
+void init(int, char *[])
+{}
+
+
+string current_root()
+{
+ return "/";
}
-string::size_type os::common_path(string const &p1, string const &p2) {
- string::size_type i = 0,
- p1_len = p1.length(),
- p2_len = p2.length();
- while (i < p1_len && i < p2_len && p1[i] == p2[i]) ++i;
+
+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 && p1[i] == 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;
+ || (i < p2_len && p2[i] != '/' && i == p1_len))
+ {
+ if (i)
+ --i; // here was the last match
+ while (i && p1[i] != '/')
+ --i;
}
return i;
}
-string os::slashify_path(string p) {
+
+string external_path(string const & p)
+{
+ return p;
+}
+
+
+string internal_path(string const & p)
+{
return p;
}
-string os::external_path(string p) {
+
+string external_path_list(string const & p)
+{
return p;
}
+
+string internal_path_list(string const & p)
+{
+ return p;
+}
+
+
+string latex_path(string const & p)
+{
+ return p;
+}
+
+
+bool is_absolute_path(string const & p)
+{
+ return !p.empty() && p[0] == '/';
+}
+
+
+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 windows_style_tex_paths(bool)
+{}
+
+bool canAutoOpenFile(string const & ext, auto_open_mode const mode)
+{
+#ifdef __APPLE__
+// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
+ CFStringRef cfs_ext = CFStringCreateWithBytes(kCFAllocatorDefault,
+ (UInt8 *) ext.c_str(), ext.length(),
+ kCFStringEncodingISOLatin1, false);
+ LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
+ FSRef outAppRef;
+ OSStatus status =
+ LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator,
+ cfs_ext, role, &outAppRef, NULL);
+ CFRelease(cfs_ext);
+
+ return status != kLSApplicationNotFoundErr;
+#else
+ // silence compiler warnings
+ (void)ext;
+ (void)mode;
+
+ // currently, no default viewer is tried for non-windows system
+ // support for KDE/Gnome/Macintosh may be added later
+ return false;
+#endif
+}
+
+
+bool autoOpenFile(string const & filename, auto_open_mode const mode)
+{
+#ifdef __APPLE__
+// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
+ FSRef fileref;
+ OSStatus status =
+ FSPathMakeRef((UInt8 *) filename.c_str(), &fileref, NULL);
+ if (status != 0)
+ return false;
+
+ LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
+ FSRef outAppRef;
+
+ status = LSGetApplicationForItem(&fileref, role, &outAppRef, NULL);
+ if (status == kLSApplicationNotFoundErr)
+ return false;
+
+ LSLaunchFSRefSpec inLaunchSpec;
+ inLaunchSpec.appRef = &outAppRef;
+ inLaunchSpec.numDocs = 1;
+ inLaunchSpec.itemRefs = &fileref;
+ inLaunchSpec.passThruParams = NULL;
+ inLaunchSpec.launchFlags = kLSLaunchDefaults;
+ inLaunchSpec.asyncRefCon = NULL;
+ status = LSOpenFromRefSpec(&inLaunchSpec, NULL);
+
+ return status != kLSApplicationNotFoundErr;
+#else
+ // silence compiler warnings
+ (void)filename;
+ (void)mode;
+
+ // currently, no default viewer is tried for non-windows system
+ // support for KDE/Gnome/Macintosh may be added later
+ return false;
+#endif
+}
+
+} // namespace os
+} // namespace support
+} // namespace lyx