1 /** 2 * D header file for Darwin. 3 * 4 * Copyright: Copyright Martin Nowak 2012. Etienne Cimon 2015. 5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 6 * Authors: Martin Nowak 7 */ 8 9 /* Copyright Martin Nowak 2012. Etienne Cimon 2015. 10 * Distributed under the Boost Software License, Version 1.0. 11 * (See accompanying file LICENSE or copy at 12 * http://www.boost.org/LICENSE_1_0.txt) 13 */ 14 module core.sys.darwin.sys.event; 15 16 version (OSX) 17 version = Darwin; 18 else version (iOS) 19 version = Darwin; 20 else version (TVOS) 21 version = Darwin; 22 else version (WatchOS) 23 version = Darwin; 24 25 version (Darwin): 26 extern (C): 27 nothrow: 28 @nogc: 29 30 import core.stdc.stdint; // intptr_t, uintptr_t 31 import core.sys.posix.time; // timespec 32 33 enum : short 34 { 35 EVFILT_READ = -1, 36 EVFILT_WRITE = -2, 37 EVFILT_AIO = -3, 38 EVFILT_VNODE = -4, 39 EVFILT_PROC = -5, 40 EVFILT_SIGNAL = -6, 41 EVFILT_TIMER = -7, 42 EVFILT_MACHPORT = -8, 43 EVFILT_FS = -9, 44 EVFILT_USER = -10, 45 EVFILT_VM = -12, 46 EVFILT_EXCEPT = -15, 47 } 48 49 extern(D) void EV_SET()(kevent_t* kevp, typeof(kevent_t.tupleof) args) 50 { 51 *kevp = kevent_t(args); 52 } 53 54 extern(D) void EV_SET64()(kevent64_s* kevp, typeof(kevent64_s.tupleof) args) 55 { 56 *kevp = kevent64_s(args); 57 } 58 59 struct kevent_t 60 { 61 uintptr_t ident; 62 short filter; 63 ushort flags; 64 uint fflags; 65 intptr_t data; 66 void *udata; 67 } 68 69 struct kevent64_s 70 { 71 ulong ident; 72 short filter; 73 ushort flags; 74 uint fflags; 75 long data; 76 ulong udata; 77 ulong[2] ext; 78 } 79 80 enum 81 { 82 83 KEVENT_FLAG_NONE = 0x000, 84 KEVENT_FLAG_IMMEDIATE = 0x001, 85 KEVENT_FLAG_ERROR_EVENTS = 0x002, 86 87 EV_ADD = 0x0001, 88 EV_DELETE = 0x0002, 89 EV_ENABLE = 0x0004, 90 EV_DISABLE = 0x0008, 91 92 EV_ONESHOT = 0x0010, 93 EV_CLEAR = 0x0020, 94 EV_RECEIPT = 0x0040, 95 96 EV_DISPATCH = 0x0080, 97 EV_UDATA_SPECIFIC = 0x0100, 98 99 EV_DISPATCH2 = EV_DISPATCH | EV_UDATA_SPECIFIC, 100 101 EV_VANISHED = 0x0200, 102 103 EV_SYSFLAGS = 0xF000, 104 EV_FLAG0 = 0x1000, 105 EV_FLAG1 = 0x2000, 106 107 EV_EOF = 0x8000, 108 EV_ERROR = 0x4000, 109 } 110 111 enum 112 { 113 EV_POLL = EV_FLAG0, 114 EV_OOBAND = EV_FLAG1, 115 } 116 117 enum 118 { 119 NOTE_TRIGGER = 0x01000000, 120 121 NOTE_FFNOP = 0x00000000, 122 NOTE_FFAND = 0x40000000, 123 NOTE_FFOR = 0x80000000, 124 NOTE_FFCOPY = 0xc0000000, 125 NOTE_FFCTRLMASK = 0xc0000000, 126 NOTE_FFLAGSMASK = 0x00ffffff, 127 128 NOTE_LOWAT = 0x0001, 129 130 NOTE_OOB = 0x0002, 131 132 NOTE_DELETE = 0x0001, 133 NOTE_WRITE = 0x0002, 134 NOTE_EXTEND = 0x0004, 135 NOTE_ATTRIB = 0x0008, 136 NOTE_LINK = 0x0010, 137 NOTE_RENAME = 0x0020, 138 NOTE_REVOKE = 0x0040, 139 NOTE_NONE = 0x0080, 140 NOTE_FUNLOCK = 0x0100, 141 142 NOTE_EXIT = 0x80000000, 143 NOTE_FORK = 0x40000000, 144 NOTE_EXEC = 0x20000000, 145 NOTE_REAP = 0x10000000, 146 NOTE_SIGNAL = 0x08000000, 147 NOTE_EXITSTATUS = 0x04000000, 148 NOTE_EXIT_DETAIL = 0x02000000, 149 NOTE_PDATAMASK = 0x000fffff, 150 NOTE_PCTRLMASK = ~NOTE_PDATAMASK, 151 152 NOTE_EXIT_REPARENTED = 0x00080000, 153 154 NOTE_EXIT_DETAIL_MASK = 0x00070000, 155 NOTE_EXIT_DECRYPTFAIL = 0x00010000, 156 NOTE_EXIT_MEMORY = 0x00020000, 157 NOTE_EXIT_CSERROR = 0x00040000, 158 159 NOTE_VM_PRESSURE = 0x80000000, 160 NOTE_VM_PRESSURE_TERMINATE = 0x40000000, 161 NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000, 162 NOTE_VM_ERROR = 0x10000000, 163 164 NOTE_SECONDS = 0x00000001, 165 NOTE_USECONDS = 0x00000002, 166 NOTE_NSECONDS = 0x00000004, 167 NOTE_ABSOLUTE = 0x00000008, 168 169 NOTE_LEEWAY = 0x00000010, 170 NOTE_CRITICAL = 0x00000020, 171 NOTE_BACKGROUND = 0x00000040, 172 NOTE_MACH_CONTINUOUS_TIME = 0x00000080, 173 174 NOTE_TRACK = 0x00000001, 175 NOTE_TRACKERR = 0x00000002, 176 NOTE_CHILD = 0x00000004, 177 } 178 179 int kqueue(); 180 int kevent(int kq, const kevent_t *changelist, int nchanges, 181 kevent_t *eventlist, int nevents, 182 const timespec *timeout); 183 int kevent64(int kq, 184 const kevent64_s *changelist, int nchanges, 185 kevent64_s *eventlist, int nevents, 186 uint flags, 187 const timespec *timeout);