[Linux] Added INotify bindings
authorStefanos A. <stapostol@gmail.com>
Tue, 14 Jan 2014 17:15:53 +0000 (18:15 +0100)
committerStefanos A. <stapostol@gmail.com>
Tue, 14 Jan 2014 17:15:53 +0000 (18:15 +0100)
These are not currently used.

Source/OpenTK/Platform/X11/Bindings/INotify.cs [new file with mode: 0644]

diff --git a/Source/OpenTK/Platform/X11/Bindings/INotify.cs b/Source/OpenTK/Platform/X11/Bindings/INotify.cs
new file mode 100644 (file)
index 0000000..662b12a
--- /dev/null
@@ -0,0 +1,210 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace OpenTK.Platform.X11.Bindings
+{
+    // Fully implemented but not currently used by OpenTK
+    // See System.IO.FileSystemWatcher for a cross-platform alternative
+#if false
+    class INotify
+    {
+        const string lib = "";
+
+        /// <summary>
+        /// Create and initialize inotify instance
+        /// </summary>
+        /// <returns></returns>
+        [DllImport(lib, EntryPoint = "inotify_init", ExactSpelling = true)]
+        public static extern int Init();
+
+        /// <summary>
+        /// Create and initialize inotify instance with specified flags
+        /// </summary>
+        /// <param name="flags">See <see cref="INotifyInitFlags"/></param>
+        /// <returns>A <c>System.Int32</c> handle to a inotify instance</returns>
+        [DllImport(lib, EntryPoint = "inotify_init1", ExactSpelling = true)]
+        public static extern int Init(INotifyFlags flags);
+
+        /// <summary>
+        /// Add watch of object pathname to inotify instance fd. Notify about
+        /// events specified by mask
+        /// </summary>
+        [DllImport(lib, EntryPoint = "inotify_add_watch", ExactSpelling = true)]
+        public static extern int AddWatch(int fd, string pathname, INotifyFlags mask);
+
+        /// <summary>
+        /// Remove the watch specified by wd from the inotify instance fd
+        /// </summary>
+        [DllImport(lib, EntryPoint = "inotify_rm_watch", ExactSpelling = true)]
+        public static extern int RemoveWatch(int fd, int wd);
+    }
+
+    /// <summary>
+    /// Describes an INotify event
+    /// </summary>
+    struct INotifyEvent
+    {
+        /// <summary>
+        /// Watch descriptor for wd parameter of INotify methods
+        /// </summary>
+        public int WatchDescriptor;
+
+        /// <summary>
+        /// Watch mask for mask parameter of INotify methods
+        /// </summary>
+        public INotifyFlags WatchMask;
+
+        /// <summary>
+        /// Cookie to synchronize two events
+        /// </summary>
+        public uint Cookie;
+
+        /// <summary>
+        /// Length (including NULs) of name
+        /// </summary>
+        public uint Length;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public IntPtr Name;
+    }
+
+    /// <summary>
+    /// Flags for the parameter of <see cref="INotify.Init(INotifyFlags)"/>
+    /// </summary>
+    [Flags]
+    enum INotifyInitFlags
+    {
+        CloExec = 02000000,
+        NonBlock = 04000
+    }
+
+    /// \internal
+    /// <summary>
+    /// Supported events suitable for MASK parameter of AddWatch.
+    /// </summary>
+    [Flags]
+    enum INotifyFlags
+    {
+        /// <summary>
+        /// File was accessed
+        /// </summary>
+        Access = 0x00000001,
+
+        /// <summary>
+        /// File was modified
+        /// </summary>
+        Modify = 0x00000002,
+
+        /// <summary>
+        /// Metadata changed
+        /// </summary>
+        Attrib = 0x00000004,
+
+        /// <summary>
+        /// Writable file was closed
+        /// </summary>
+        CloseWrite = 0x00000008,
+
+        /// <summary>
+        /// Unwritable file closed
+        /// </summary>
+        CloseNoWrite = 0x00000010,
+
+        /// <summary>
+        /// File closed
+        /// </summary>
+        Close = CloseWrite | CloseNoWrite,
+
+        /// <summary>
+        /// File was opened
+        /// </summary>
+        Open = 0x00000020,
+
+        /// <summary>
+        /// File was moved from X
+        /// </summary>
+        MovedFrom = 0x00000040,
+
+        /// <summary>
+        /// File was moved to Y
+        /// </summary>
+        MovedTo = 0x00000080,
+
+        /// <summary>
+        /// File was moved
+        /// </summary>
+        Move = MovedFrom | MovedTo,
+
+        /// <summary>
+        /// Subfile was created
+        /// </summary>
+        Create = 0x00000100,
+
+        /// <summary>
+        /// Subfile was deleted
+        /// </summary>
+        Delete = 0x00000200,
+
+        /// <summary>
+        /// Self was deleted
+        /// </summary>
+        DeleteSelf = 0x00000400,
+
+        /// <summary>
+        /// Self was moved
+        /// </summary>
+        MoveSelf = 0x00000800,
+
+        /// <summary>
+        /// Backing fs was unmounted
+        /// </summary>
+        Unmount = 0x00002000,
+
+        /// <summary>
+        /// Event queue overflowed
+        /// </summary>
+        QueueOverflow = 0x00004000,
+
+        /// <summary>
+        /// File was ignored
+        /// </summary>
+        Ignored = 0x00008000,
+
+        /// <summary>
+        /// Only watch the path if it is a directory
+        /// </summary>
+        OnlyDirectory = 0x01000000,
+
+        /// <summary>
+        /// Do not follow symlinks
+        /// </summary>
+        DontFollow = 0x02000000,
+
+        /// <summary>
+        /// Add to the mask of an already existing watch
+        /// </summary>
+        MaskAdd = 0x20000000,
+
+        /// <summary>
+        /// Event occurred against dir
+        /// </summary>
+        IsDirectory = 0x40000000,
+
+        /// <summary>
+        /// Only send event once
+        /// </summary>
+        Oneshot = 0x80000000,
+
+        /// <summary>
+        /// All events which a program can wait on
+        /// </summary>
+        AllEvents =
+            Access | Modify | Attrib | Close | Open | Move |
+            Create | Delete | DeleteSelf | MoveSelf
+    }
+#endif
+}