+extern boost::filesystem::path disk_writer_path ();
+#ifdef DCPOMATIC_OSX
+extern boost::filesystem::path app_contents ();
+#endif
+#ifdef DCPOMATIC_WINDOWS
+extern void maybe_open_console ();
+#endif
+extern boost::filesystem::path shared_path ();
+extern FILE * fopen_boost (boost::filesystem::path, std::string);
+extern int dcpomatic_fseek (FILE *, int64_t, int);
+extern void start_batch_converter (boost::filesystem::path dcpomatic);
+extern void start_player (boost::filesystem::path dcpomatic);
+extern uint64_t thread_id ();
+extern int avio_open_boost (AVIOContext** s, boost::filesystem::path file, int flags);
+extern boost::filesystem::path home_directory ();
+extern std::string command_and_read (std::string cmd);
+extern bool running_32_on_64 ();
+extern void unprivileged ();
+extern boost::filesystem::path config_path ();
+
+class PrivilegeEscalator
+{
+public:
+ PrivilegeEscalator ();
+ ~PrivilegeEscalator ();
+};
+
+/** @class Waker
+ * @brief A class which tries to keep the computer awake on various operating systems.
+ *
+ * Create a Waker to prevent sleep, and call nudge() every so often (every minute or so).
+ * Destroy the Waker to allow sleep again.
+ */
+class Waker
+{
+public:
+ Waker ();
+ ~Waker ();
+
+ void nudge ();
+
+private:
+ boost::mutex _mutex;
+#ifdef DCPOMATIC_OSX
+ IOPMAssertionID _assertion_id;
+#endif
+};
+
+class Drive
+{
+public:
+ Drive (std::string internal_name, uint64_t size, bool mounted, boost::optional<std::string> vendor, boost::optional<std::string> model)
+ : _internal_name(internal_name)
+ , _size(size)
+ , _mounted(mounted)
+ , _vendor(vendor)
+ , _model(model)
+ {}
+
+ std::string description () const;
+ std::string internal_name () const {
+ return _internal_name;
+ }
+ bool mounted () const {
+ return _mounted;
+ }
+
+private:
+ std::string _internal_name;
+ /** size in bytes */
+ uint64_t _size;
+ bool _mounted;
+ boost::optional<std::string> _vendor;
+ boost::optional<std::string> _model;
+};
+
+std::vector<Drive> get_drives ();
+
+#endif