summaryrefslogtreecommitdiffstats
path: root/make/stub_includes/egl/KD/kd.h
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2009-06-15 22:57:38 +0000
committerKenneth Russel <[email protected]>2009-06-15 22:57:38 +0000
commita959c53b7ac91e489bf0959391e892790b9ff248 (patch)
tree4664742a4f9f6daa694364292e376ad2e6ee97d1 /make/stub_includes/egl/KD/kd.h
parent506b634b780dcd23aa61015c2ceba3e687196abf (diff)
Copied JOGL_2_SANDBOX r1957 on to trunk; JOGL_2_SANDBOX branch is now closed
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@1959 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'make/stub_includes/egl/KD/kd.h')
-rwxr-xr-xmake/stub_includes/egl/KD/kd.h1014
1 files changed, 1014 insertions, 0 deletions
diff --git a/make/stub_includes/egl/KD/kd.h b/make/stub_includes/egl/KD/kd.h
new file mode 100755
index 000000000..c82385b86
--- /dev/null
+++ b/make/stub_includes/egl/KD/kd.h
@@ -0,0 +1,1014 @@
+/*
+* Copyright (c) 2007 The Khronos Group Inc.
+*
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to deal in the Software without restriction, including
+* without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to
+* permit persons to whom the Software is furnished to do so, subject
+* to the following conditions:
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*
+*/
+
+#ifndef __kd_h_
+#define __kd_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "kdplatform.h"
+
+
+
+/*******************************************************
+ * Introduction
+ *******************************************************/
+
+/*******************************************************
+ * OpenKODE conformance
+ *******************************************************/
+
+/*******************************************************
+ * Overview
+ *******************************************************/
+
+/*******************************************************
+ * Programming environment
+ *******************************************************/
+#define KD_VERSION_1_0 1
+typedef char KDchar;
+typedef signed char KDint8;
+typedef unsigned char KDuint8;
+typedef int KDint;
+typedef unsigned int KDuint;
+typedef float KDfloat32;
+typedef KDint KDboolean;
+typedef KDint64 KDtime;
+typedef KDint64 KDust;
+typedef KDint64 KDoff;
+typedef KDuint32 KDmode;
+#define KDINT32_MIN (-0x7fffffff-1)
+#define KDINT32_MAX 0x7fffffff
+#define KDUINT32_MAX 0xffffffffU
+#define KD_TRUE 1
+#define KD_FALSE 0
+#ifdef __cplusplus
+ const int KD_NULL = 0; /* Yes, int. See Stroustrup 3rd edition. */
+#else
+ #define KD_NULL ((void *)0)
+#endif
+
+/*******************************************************
+ * Errors
+ *******************************************************/
+#define KD_EACCES 1
+#define KD_EADDRINUSE 2
+#define KD_EADDRNOTAVAIL 3
+#define KD_EAFNOSUPPORT 4
+#define KD_EAGAIN (5)
+#define KD_EALREADY 6
+#define KD_EBADF 7
+#define KD_EBUSY 8
+#define KD_ECONNREFUSED 9
+#define KD_ECONNRESET 10
+#define KD_EDEADLK 11
+#define KD_EDESTADDRREQ 12
+#define KD_EEXIST 13
+#define KD_EFBIG 14
+#define KD_EHOSTUNREACH 15
+#define KD_EHOST_NOT_FOUND 16
+#define KD_EINVAL 17
+#define KD_EIO 18
+#define KD_EILSEQ 19
+#define KD_EISCONN 20
+#define KD_EISDIR 21
+#define KD_EMFILE 22
+#define KD_ENAMETOOLONG 23
+#define KD_ENOENT 24
+#define KD_ENOMEM 25
+#define KD_ENOSPC 26
+#define KD_ENOSYS 27
+#define KD_ENOTCONN 28
+#define KD_ENO_DATA 29
+#define KD_ENO_RECOVERY 30
+#define KD_EOPNOTSUPP 31
+#define KD_EOVERFLOW 32
+#define KD_EPERM 33
+#define KD_EPIPE 34
+#define KD_ERANGE 35
+#define KD_ETIMEDOUT (36)
+#define KD_ETRY_AGAIN 37
+
+/* kdGetError: Get last error indication. */
+KD_API KDint KD_APIENTRY kdGetError(void);
+
+/* kdSetError: Set last error indication. */
+KD_API void KD_APIENTRY kdSetError(KDint error);
+
+/*******************************************************
+ * Versioning and attribute queries
+ *******************************************************/
+
+/* kdQueryAttribi: Obtain the value of a numeric OpenKODE Core attribute. */
+KD_API KDint KD_APIENTRY kdQueryAttribi(KDint attribute, KDint *value);
+
+/* kdQueryAttribcv: Obtain the value of a string OpenKODE Core attribute. */
+KD_API const KDchar *KD_APIENTRY kdQueryAttribcv(KDint attribute);
+#define KD_ATTRIB_VENDOR 39
+#define KD_ATTRIB_VERSION 40
+#define KD_ATTRIB_PLATFORM 41
+
+/* kdQueryIndexedAttribcv: Obtain the value of an indexed string OpenKODE Core attribute. */
+KD_API const KDchar *KD_APIENTRY kdQueryIndexedAttribcv(KDint attribute, KDint index);
+
+/*******************************************************
+ * Threads and synchronization
+ *******************************************************/
+
+/* kdThreadAttrCreate: Create a thread attribute object. */
+typedef struct KDThreadAttr KDThreadAttr;
+KD_API KDThreadAttr *KD_APIENTRY kdThreadAttrCreate(void);
+
+/* kdThreadAttrFree: Free a thread attribute object. */
+KD_API KDint KD_APIENTRY kdThreadAttrFree(KDThreadAttr *attr);
+
+/* kdThreadAttrSetDetachState: Set detachstate attribute. */
+#define KD_THREAD_CREATE_JOINABLE 0
+#define KD_THREAD_CREATE_DETACHED 1
+KD_API KDint KD_APIENTRY kdThreadAttrSetDetachState(KDThreadAttr *attr, KDint detachstate);
+
+/* kdThreadAttrSetStackSize: Set stacksize attribute. */
+KD_API KDint KD_APIENTRY kdThreadAttrSetStackSize(KDThreadAttr *attr, KDsize stacksize);
+
+/* kdThreadCreate: Create a new thread. */
+typedef struct KDThread KDThread;
+KD_API KDThread *KD_APIENTRY kdThreadCreate(const KDThreadAttr *attr, void *(*start_routine)(void *), void *arg);
+
+/* kdThreadExit: Terminate this thread. */
+KD_API KD_NORETURN void KD_APIENTRY kdThreadExit(void *retval);
+
+/* kdThreadJoin: Wait for termination of another thread. */
+KD_API KDint KD_APIENTRY kdThreadJoin(KDThread *thread, void **retval);
+
+/* kdThreadDetach: Allow resources to be freed as soon as a thread terminates. */
+KD_API KDint KD_APIENTRY kdThreadDetach(KDThread *thread);
+
+/* kdThreadSelf: Return calling thread&#8217;s ID. */
+KD_API KDThread *KD_APIENTRY kdThreadSelf(void);
+
+/* kdThreadOnce: Wrap initialization code so it is executed only once. */
+#ifndef KD_NO_STATIC_DATA
+typedef struct KDThreadOnce {
+ void *impl;
+} KDThreadOnce;
+#define KD_THREAD_ONCE_INIT { 0 }
+KD_API KDint KD_APIENTRY kdThreadOnce(KDThreadOnce *once_control, void (*init_routine)(void));
+#endif /* ndef KD_NO_STATIC_DATA */
+
+/* kdThreadMutexCreate: Create a mutex. */
+typedef struct KDThreadMutex KDThreadMutex;
+KD_API KDThreadMutex *KD_APIENTRY kdThreadMutexCreate(const void *mutexattr);
+
+/* kdThreadMutexFree: Free a mutex. */
+KD_API KDint KD_APIENTRY kdThreadMutexFree(KDThreadMutex *mutex);
+
+/* kdThreadMutexLock: Lock a mutex. */
+KD_API KDint KD_APIENTRY kdThreadMutexLock(KDThreadMutex *mutex);
+
+/* kdThreadMutexUnlock: Unlock a mutex. */
+KD_API KDint KD_APIENTRY kdThreadMutexUnlock(KDThreadMutex *mutex);
+
+/* kdThreadCondCreate: Create a condition variable. */
+typedef struct KDThreadCond KDThreadCond;
+KD_API KDThreadCond *KD_APIENTRY kdThreadCondCreate(const void *attr);
+
+/* kdThreadCondFree: Free a condition variable. */
+KD_API KDint KD_APIENTRY kdThreadCondFree(KDThreadCond *cond);
+
+/* kdThreadCondSignal, kdThreadCondBroadcast: Signal a condition variable. */
+KD_API KDint KD_APIENTRY kdThreadCondSignal(KDThreadCond *cond);
+KD_API KDint KD_APIENTRY kdThreadCondBroadcast(KDThreadCond *cond);
+
+/* kdThreadCondWait: Wait for a condition variable to be signalled. */
+KD_API KDint KD_APIENTRY kdThreadCondWait(KDThreadCond *cond, KDThreadMutex *mutex);
+
+/* kdThreadSemCreate: Create a semaphore. */
+typedef struct KDThreadSem KDThreadSem;
+KD_API KDThreadSem *KD_APIENTRY kdThreadSemCreate(KDuint value);
+
+/* kdThreadSemFree: Free a semaphore. */
+KD_API KDint KD_APIENTRY kdThreadSemFree(KDThreadSem *sem);
+
+/* kdThreadSemWait: Lock a semaphore. */
+KD_API KDint KD_APIENTRY kdThreadSemWait(KDThreadSem *sem);
+
+/* kdThreadSemPost: Unlock a semaphore. */
+KD_API KDint KD_APIENTRY kdThreadSemPost(KDThreadSem *sem);
+
+/*******************************************************
+ * Events
+ *******************************************************/
+
+/* KDEvent: Struct type containing an event. */
+typedef struct KDEvent KDEvent;
+#define KD_EVENT_USER 0x40000000
+
+/* kdWaitEvent: Get next event from thread&#8217;s event queue. */
+KD_API const KDEvent *KD_APIENTRY kdWaitEvent(KDust timeout);
+
+/* kdSetEventUserptr: Set the userptr for global events. */
+KD_API void KD_APIENTRY kdSetEventUserptr(void *userptr);
+
+/* kdDefaultEvent: Perform default processing on an unrecognized event. */
+KD_API void KD_APIENTRY kdDefaultEvent(const KDEvent *event);
+
+/* kdPumpEvents: Pump the thread&#8217;s event queue, performing callbacks. */
+KD_API KDint KD_APIENTRY kdPumpEvents(void);
+
+/* kdInstallCallback: Install or remove a callback function for event processing. */
+typedef void (KD_APIENTRY KDCallbackFunc)(const KDEvent *event);
+KD_API KDint KD_APIENTRY kdInstallCallback(KDCallbackFunc *func, KDint eventtype, void *eventuserptr);
+
+/* kdCreateEvent: Create an event for posting. */
+KD_API KDEvent *KD_APIENTRY kdCreateEvent(void);
+
+/* kdPostEvent, kdPostThreadEvent: Post an event into a queue. */
+KD_API KDint KD_APIENTRY kdPostEvent(KDEvent *event);
+KD_API KDint KD_APIENTRY kdPostThreadEvent(KDEvent *event, KDThread *thread);
+typedef struct KDEventUser {
+ union {
+ KDint64 i64;
+ void *p;
+ struct {
+ KDint32 a;
+ KDint32 b;
+ } i32pair;
+ } value1;
+ union {
+ KDint64 i64;
+ struct {
+ union {
+ KDint32 i32;
+ void *p;
+ } value2;
+ union {
+ KDint32 i32;
+ void *p;
+ } value3;
+ } i32orp;
+ } value23;
+} KDEventUser;
+
+/* kdFreeEvent: Abandon an event instead of posting it. */
+KD_API void KD_APIENTRY kdFreeEvent(KDEvent *event);
+
+/*******************************************************
+ * System events
+ *******************************************************/
+
+/* KD_EVENT_QUIT: Event to request to quit application. */
+#define KD_EVENT_QUIT 43
+
+/* KD_EVENT_PAUSE: Application pause event. */
+#define KD_EVENT_PAUSE 45
+
+/* KD_EVENT_RESUME: Application resume event. */
+#define KD_EVENT_RESUME 46
+
+/* KD_EVENT_ORIENTATION: Orientation change event. */
+#define KD_EVENT_ORIENTATION 48
+
+/* KD_IOGROUP_EVENT: I/O group for OpenKODE Core system events implemented as state values. */
+#define KD_IOGROUP_EVENT 0x100
+#define KD_STATE_EVENT_USING_BATTERY (KD_IOGROUP_EVENT + 0)
+#define KD_STATE_EVENT_LOW_BATTERY (KD_IOGROUP_EVENT + 1)
+
+
+/* KD_IOGROUP_ORIENTATION: I/O group for OpenKODE Core orientation state. */
+#define KD_IOGROUP_ORIENTATION 0x200
+#define KD_STATE_ORIENTATION_OVERALL (KD_IOGROUP_ORIENTATION + 0)
+#define KD_STATE_ORIENTATION_SCREEN (KD_IOGROUP_ORIENTATION + 1)
+#define KD_STATE_ORIENTATION_RENDERING (KD_IOGROUP_ORIENTATION + 2)
+#define KD_STATE_ORIENTATION_LOCKSURFACE (KD_IOGROUP_ORIENTATION + 3)
+
+
+/*******************************************************
+ * Application startup and exit.
+ *******************************************************/
+
+/* kdMain: The application-defined main function. */
+KD_API KDint KD_APIENTRY kdMain(KDint argc, const KDchar *const *argv);
+
+/* kdExit: Exit the application. */
+KD_API KD_NORETURN void KD_APIENTRY kdExit(KDint status);
+
+/*******************************************************
+ * Utility library functions
+ *******************************************************/
+
+/* kdAbs: Compute the absolute value of an integer. */
+KD_API KDint KD_APIENTRY kdAbs(KDint i);
+
+/* kdStrtof: Convert a string to a floating point number. */
+KD_API KDfloat32 KD_APIENTRY kdStrtof(const KDchar *s, KDchar **endptr);
+
+/* kdStrtol, kdStrtoul: Convert a string to an integer. */
+KD_API KDint KD_APIENTRY kdStrtol(const KDchar *s, KDchar **endptr, KDint base);
+KD_API KDuint KD_APIENTRY kdStrtoul(const KDchar *s, KDchar **endptr, KDint base);
+
+/* kdLtostr, kdUltostr: Convert an integer to a string. */
+#define KD_LTOSTR_MAXLEN ((sizeof(KDint)*8*3+6)/10+2)
+#define KD_ULTOSTR_MAXLEN ((sizeof(KDint)*8+2)/3+1)
+KD_API KDssize KD_APIENTRY kdLtostr(KDchar *buffer, KDsize buflen, KDint number);
+KD_API KDssize KD_APIENTRY kdUltostr(KDchar *buffer, KDsize buflen, KDuint number, KDint base);
+
+/* kdFtostr: Convert a float to a string. */
+#define KD_FTOSTR_MAXLEN 16
+KD_API KDssize KD_APIENTRY kdFtostr(KDchar *buffer, KDsize buflen, KDfloat32 number);
+
+/* kdCryptoRandom: Return random data. */
+KD_API KDint KD_APIENTRY kdCryptoRandom(KDuint8 *buf, KDsize buflen);
+
+/*******************************************************
+ * Locale specific functions
+ *******************************************************/
+
+/* kdGetLocale: Determine the current language and locale. */
+KD_API const KDchar *KD_APIENTRY kdGetLocale(void);
+
+/*******************************************************
+ * Memory allocation
+ *******************************************************/
+
+/* kdMalloc: Allocate memory. */
+KD_API void *KD_APIENTRY kdMalloc(KDsize size);
+
+/* kdFree: Free allocated memory block. */
+KD_API void KD_APIENTRY kdFree(void *ptr);
+
+/* kdRealloc: Resize memory block. */
+KD_API void *KD_APIENTRY kdRealloc(void *ptr, KDsize size);
+
+/*******************************************************
+ * Thread-local storage.
+ *******************************************************/
+
+/* kdGetTLS: Get the thread-local storage pointer. */
+KD_API void *KD_APIENTRY kdGetTLS(void);
+
+/* kdSetTLS: Set the thread-local storage pointer. */
+KD_API void KD_APIENTRY kdSetTLS(void *ptr);
+
+/*******************************************************
+ * Mathematical functions
+ *******************************************************/
+#define KD_E_F 2.71828175F
+#define KD_PI_F 3.14159274F
+#define KD_PI_2_F 1.57079637F
+#define KD_2PI_F 6.28318548F
+#define KD_LOG2E_F 1.44269502F
+#define KD_LOG10E_F 0.434294492F
+#define KD_LN2_F 0.693147182F
+#define KD_LN10_F 2.30258512F
+#define KD_PI_4_F 0.785398185F
+#define KD_1_PI_F 0.318309873F
+#define KD_2_PI_F 0.636619747F
+#define KD_2_SQRTPI_F 1.12837923F
+#define KD_SQRT2_F 1.41421354F
+#define KD_SQRT1_2_F 0.707106769F
+#define KD_FLT_EPSILON 1.19209290E-07F
+#define KD_FLT_MAX 3.40282346638528860e+38F
+#define KD_FLT_MIN 1.17549435e-38F
+/* KD_INFINITY is defined in kdplatform.h since no portable definition
+ * is possible. */
+#define kdIsNan(x) (((x) != (x)) ? 1 : 0)
+#define KD_HUGE_VALF KD_INFINITY
+#define KD_DEG_TO_RAD_F 0.0174532924F
+#define KD_RAD_TO_DEG_F 57.2957802F
+
+/* kdAcosf: Arc cosine function. */
+KD_API KDfloat32 KD_APIENTRY kdAcosf(KDfloat32 x);
+
+/* kdAsinf: Arc sine function. */
+KD_API KDfloat32 KD_APIENTRY kdAsinf(KDfloat32 x);
+
+/* kdAtanf: Arc tangent function. */
+KD_API KDfloat32 KD_APIENTRY kdAtanf(KDfloat32 x);
+
+/* kdAtan2f: Arc tangent function. */
+KD_API KDfloat32 KD_APIENTRY kdAtan2f(KDfloat32 y, KDfloat32 x);
+
+/* kdCosf: Cosine function. */
+KD_API KDfloat32 KD_APIENTRY kdCosf(KDfloat32 x);
+
+/* kdSinf: Sine function. */
+KD_API KDfloat32 KD_APIENTRY kdSinf(KDfloat32 x);
+
+/* kdTanf: Tangent function. */
+KD_API KDfloat32 KD_APIENTRY kdTanf(KDfloat32 x);
+
+/* kdExpf: Exponential function. */
+KD_API KDfloat32 KD_APIENTRY kdExpf(KDfloat32 x);
+
+/* kdLogf: Natural logarithm function. */
+KD_API KDfloat32 KD_APIENTRY kdLogf(KDfloat32 x);
+
+/* kdFabsf: Absolute value. */
+KD_API KDfloat32 KD_APIENTRY kdFabsf(KDfloat32 x);
+
+/* kdPowf: Power function. */
+KD_API KDfloat32 KD_APIENTRY kdPowf(KDfloat32 x, KDfloat32 y);
+
+/* kdSqrtf: Square root function. */
+KD_API KDfloat32 KD_APIENTRY kdSqrtf(KDfloat32 x);
+
+/* kdCeilf: Return ceiling value. */
+KD_API KDfloat32 KD_APIENTRY kdCeilf(KDfloat32 x);
+
+/* kdFloorf: Return floor value. */
+KD_API KDfloat32 KD_APIENTRY kdFloorf(KDfloat32 x);
+
+/* kdRoundf: Round value to nearest integer. */
+KD_API KDfloat32 KD_APIENTRY kdRoundf(KDfloat32 x);
+
+/* kdInvsqrtf: Inverse square root function. */
+KD_API KDfloat32 KD_APIENTRY kdInvsqrtf(KDfloat32 x);
+
+/* kdFmodf: Calculate floating point remainder. */
+KD_API KDfloat32 KD_APIENTRY kdFmodf(KDfloat32 x, KDfloat32 y);
+
+/*******************************************************
+ * String and memory functions
+ *******************************************************/
+
+/* kdMemchr: Scan memory for a byte value. */
+KD_API void *KD_APIENTRY kdMemchr(const void *src, KDint byte, KDsize len);
+
+/* kdMemcmp: Compare two memory regions. */
+KD_API KDint KD_APIENTRY kdMemcmp(const void *src1, const void *src2, KDsize len);
+
+/* kdMemcpy: Copy a memory region, no overlapping. */
+KD_API void *KD_APIENTRY kdMemcpy(void *buf, const void *src, KDsize len);
+
+/* kdMemmove: Copy a memory region, overlapping allowed. */
+KD_API void *KD_APIENTRY kdMemmove(void *buf, const void *src, KDsize len);
+
+/* kdMemset: Set bytes in memory to a value. */
+KD_API void *KD_APIENTRY kdMemset(void *buf, KDint byte, KDsize len);
+
+/* kdStrchr: Scan string for a byte value. */
+KD_API KDchar *KD_APIENTRY kdStrchr(const KDchar *str, KDint ch);
+
+/* kdStrcmp: Compares two strings. */
+KD_API KDint KD_APIENTRY kdStrcmp(const KDchar *str1, const KDchar *str2);
+
+/* kdStrlen: Determine the length of a string. */
+KD_API KDsize KD_APIENTRY kdStrlen(const KDchar *str);
+
+/* kdStrnlen: Determine the length of a string. */
+KD_API KDsize KD_APIENTRY kdStrnlen(const KDchar *str, KDsize maxlen);
+
+/* kdStrncat_s: Concatenate two strings. */
+KD_API KDint KD_APIENTRY kdStrncat_s(KDchar *buf, KDsize buflen, const KDchar *src, KDsize srcmaxlen);
+
+/* kdStrncmp: Compares two strings with length limit. */
+KD_API KDint KD_APIENTRY kdStrncmp(const KDchar *str1, const KDchar *str2, KDsize maxlen);
+
+/* kdStrcpy_s: Copy a string with an overrun check. */
+KD_API KDint KD_APIENTRY kdStrcpy_s(KDchar *buf, KDsize buflen, const KDchar *src);
+
+/* kdStrncpy_s: Copy a string with an overrun check. */
+KD_API KDint KD_APIENTRY kdStrncpy_s(KDchar *buf, KDsize buflen, const KDchar *src, KDsize srclen);
+
+/*******************************************************
+ * Time functions
+ *******************************************************/
+
+/* kdGetTimeUST: Get the current unadjusted system time. */
+KD_API KDust KD_APIENTRY kdGetTimeUST(void);
+
+/* kdTime: Get the current wall clock time. */
+KD_API KDtime KD_APIENTRY kdTime(KDtime *timep);
+
+/* kdGmtime_r, kdLocaltime_r: Convert a seconds-since-epoch time into broken-down time. */
+typedef struct KDTm {
+ KDint32 tm_sec;
+ KDint32 tm_min;
+ KDint32 tm_hour;
+ KDint32 tm_mday;
+ KDint32 tm_mon;
+ KDint32 tm_year;
+ KDint32 tm_wday;
+ KDint32 tm_yday;
+} KDTm;
+KD_API KDTm *KD_APIENTRY kdGmtime_r(const KDtime *timep, KDTm *result);
+KD_API KDTm *KD_APIENTRY kdLocaltime_r(const KDtime *timep, KDTm *result);
+
+/* kdUSTAtEpoch: Get the UST corresponding to KDtime 0. */
+KD_API KDust KD_APIENTRY kdUSTAtEpoch(void);
+
+/*******************************************************
+ * Timer functions
+ *******************************************************/
+
+/* kdSetTimer: Set timer. */
+#define KD_TIMER_ONESHOT 61
+#define KD_TIMER_PERIODIC_AVERAGE 62
+#define KD_TIMER_PERIODIC_MINIMUM 63
+typedef struct KDTimer KDTimer;
+KD_API KDTimer *KD_APIENTRY kdSetTimer(KDint64 interval, KDint periodic, void *eventuserptr);
+
+/* kdCancelTimer: Cancel and free a timer. */
+KD_API KDint KD_APIENTRY kdCancelTimer(KDTimer *timer);
+
+/* KD_EVENT_TIMER: Timer fire event. */
+#define KD_EVENT_TIMER 42
+
+/*******************************************************
+ * File system
+ *******************************************************/
+#define KD_EOF (-1)
+
+/* kdFopen: Open a file from the file system. */
+typedef struct KDFile KDFile;
+KD_API KDFile *KD_APIENTRY kdFopen(const KDchar *pathname, const KDchar *mode);
+
+/* kdFclose: Close an open file. */
+KD_API KDint KD_APIENTRY kdFclose(KDFile *file);
+
+/* kdFflush: Flush an open file. */
+KD_API KDint KD_APIENTRY kdFflush(KDFile *file);
+
+/* kdFread: Read from a file. */
+KD_API KDsize KD_APIENTRY kdFread(void *buffer, KDsize size, KDsize count, KDFile *file);
+
+/* kdFwrite: Write to a file. */
+KD_API KDsize KD_APIENTRY kdFwrite(const void *buffer, KDsize size, KDsize count, KDFile *file);
+
+/* kdGetc: Read next byte from an open file. */
+KD_API KDint KD_APIENTRY kdGetc(KDFile *file);
+
+/* kdPutc: Write a byte to an open file. */
+KD_API KDint KD_APIENTRY kdPutc(KDint c, KDFile *file);
+
+/* kdFgets: Read a line of text from an open file. */
+KD_API KDchar *KD_APIENTRY kdFgets(KDchar *buffer, KDsize buflen, KDFile *file);
+
+/* kdFEOF: Check for end of file. */
+KD_API KDint KD_APIENTRY kdFEOF(KDFile *file);
+
+/* kdFerror: Check for an error condition on an open file. */
+KD_API KDint KD_APIENTRY kdFerror(KDFile *file);
+
+/* kdClearerr: Clear a file&#8217;s error and end-of-file indicators. */
+KD_API void KD_APIENTRY kdClearerr(KDFile *file);
+
+/* kdFseek: Reposition the file position indicator in a file. */
+typedef enum {
+ KD_SEEK_SET = 0,
+ KD_SEEK_CUR = 1,
+ KD_SEEK_END = 2
+} KDfileSeekOrigin;
+KD_API KDint KD_APIENTRY kdFseek(KDFile *file, KDoff offset, KDfileSeekOrigin origin);
+
+/* kdFtell: Get the file position of an open file. */
+KD_API KDoff KD_APIENTRY kdFtell(KDFile *file);
+
+/* kdMkdir: Create new directory. */
+KD_API KDint KD_APIENTRY kdMkdir(const KDchar *pathname);
+
+/* kdRmdir: Delete a directory. */
+KD_API KDint KD_APIENTRY kdRmdir(const KDchar *pathname);
+
+/* kdRename: Rename a file. */
+KD_API KDint KD_APIENTRY kdRename(const KDchar *src, const KDchar *dest);
+
+/* kdRemove: Delete a file. */
+KD_API KDint KD_APIENTRY kdRemove(const KDchar *pathname);
+
+/* kdTruncate: Truncate or extend a file. */
+KD_API KDint KD_APIENTRY kdTruncate(const KDchar *pathname, KDoff length);
+
+/* kdStat, kdFstat: Return information about a file. */
+typedef struct KDStat {
+ KDmode st_mode;
+ KDoff st_size;
+ KDtime st_mtime;
+} KDStat;
+KD_API KDint KD_APIENTRY kdStat(const KDchar *pathname, struct KDStat *buf);
+KD_API KDint KD_APIENTRY kdFstat(KDFile *file, struct KDStat *buf);
+#define KD_ISREG(m) ((m) & 0x8000)
+#define KD_ISDIR(m) ((m) & 0x4000)
+
+/* kdAccess: Determine whether the application can access a file or directory. */
+KD_API KDint KD_APIENTRY kdAccess(const KDchar *pathname, KDint amode);
+#define KD_R_OK 4
+#define KD_W_OK 2
+#define KD_X_OK 1
+
+/* kdOpenDir: Open a directory ready for listing. */
+typedef struct KDDir KDDir;
+KD_API KDDir *KD_APIENTRY kdOpenDir(const KDchar *pathname);
+
+/* kdReadDir: Return the next file in a directory. */
+typedef struct KDDirent {
+ const KDchar *d_name;
+} KDDirent;
+KD_API KDDirent *KD_APIENTRY kdReadDir(KDDir *dir);
+
+/* kdCloseDir: Close a directory. */
+KD_API KDint KD_APIENTRY kdCloseDir(KDDir *dir);
+
+/* kdGetFree: Get free space on a drive. */
+KD_API KDoff KD_APIENTRY kdGetFree(const KDchar *pathname);
+
+/*******************************************************
+ * Network sockets
+ *******************************************************/
+
+/* KDSockaddr: Struct type for socket address. */
+typedef struct KDSockaddr {
+ KDuint16 family;
+ union {
+#define KD_AF_INET 70
+ struct {
+ KDuint16 port;
+ KDuint32 address;
+ } sin;
+ } data;
+} KDSockaddr;
+
+/* kdNameLookup: Look up a hostname. */
+KD_API KDint KD_APIENTRY kdNameLookup(KDint af, const KDchar *hostname, void *eventuserptr);
+
+/* kdNameLookupCancel: Selectively cancels ongoing kdNameLookup operations. */
+KD_API void KD_APIENTRY kdNameLookupCancel(void *eventuserptr);
+
+/* kdSocketCreate: Creates a socket. */
+typedef struct KDSocket KDSocket;
+KD_API KDSocket *KD_APIENTRY kdSocketCreate(KDint type, void *eventuserptr);
+#define KD_SOCK_TCP 64
+#define KD_SOCK_UDP 65
+
+/* kdSocketClose: Closes a socket. */
+KD_API KDint KD_APIENTRY kdSocketClose(KDSocket *socket);
+
+/* kdSocketBind: Bind a socket. */
+KD_API KDint KD_APIENTRY kdSocketBind(KDSocket *socket, const struct KDSockaddr *addr, KDboolean reuse);
+#define KD_INADDR_ANY 0
+
+/* kdSocketGetName: Get the local address of a socket. */
+KD_API KDint KD_APIENTRY kdSocketGetName(KDSocket *socket, struct KDSockaddr *addr);
+
+/* kdSocketConnect: Connects a socket. */
+KD_API KDint KD_APIENTRY kdSocketConnect(KDSocket *socket, const KDSockaddr *addr);
+
+/* kdSocketListen: Listen on a socket. */
+KD_API KDint KD_APIENTRY kdSocketListen(KDSocket *socket, KDint backlog);
+
+/* kdSocketAccept: Accept an incoming connection. */
+KD_API KDSocket *KD_APIENTRY kdSocketAccept(KDSocket *socket, KDSockaddr *addr, void *eventuserptr);
+
+/* kdSocketSend, kdSocketSendTo: Send data to a socket. */
+KD_API KDint KD_APIENTRY kdSocketSend(KDSocket *socket, const void *buf, KDint len);
+KD_API KDint KD_APIENTRY kdSocketSendTo(KDSocket *socket, const void *buf, KDint len, const KDSockaddr *addr);
+
+/* kdSocketRecv, kdSocketRecvFrom: Receive data from a socket. */
+KD_API KDint KD_APIENTRY kdSocketRecv(KDSocket *socket, void *buf, KDint len);
+KD_API KDint KD_APIENTRY kdSocketRecvFrom(KDSocket *socket, void *buf, KDint len, KDSockaddr *addr);
+
+/* kdHtonl: Convert a 32-bit integer from host to network byte order. */
+KD_API KDuint32 KD_APIENTRY kdHtonl(KDuint32 hostlong);
+
+/* kdHtons: Convert a 16-bit integer from host to network byte order. */
+KD_API KDuint16 KD_APIENTRY kdHtons(KDuint16 hostshort);
+
+/* kdNtohl: Convert a 32-bit integer from network to host byte order. */
+KD_API KDuint32 KD_APIENTRY kdNtohl(KDuint32 netlong);
+
+/* kdNtohs: Convert a 16-bit integer from network to host byte order. */
+KD_API KDuint16 KD_APIENTRY kdNtohs(KDuint16 netshort);
+
+/* kdInetAton: Convert a &#8220;dotted quad&#8221; format address to an integer. */
+KD_API KDint KD_APIENTRY kdInetAton(const KDchar *cp, KDuint32 *inp);
+
+/* kdInetNtop: Convert a network address to textual form. */
+#define KD_INET_ADDRSTRLEN 16
+typedef struct KDInAddr {
+ KDuint32 _s_addr; /* MSVC VC9 again .. couldn't handle s_addr here */
+} KDInAddr;
+KD_API const KDchar *KD_APIENTRY kdInetNtop(KDuint af, const void *src, KDchar *dst, KDsize cnt);
+
+/* KD_EVENT_SOCKET_READABLE: Event to indicate that a socket is readable. */
+#define KD_EVENT_SOCKET_READABLE 49
+typedef struct KDEventSocketReadable {
+ KDSocket *socket;
+} KDEventSocketReadable;
+
+/* KD_EVENT_SOCKET_WRITABLE: Event to indicate that a socket is writable. */
+#define KD_EVENT_SOCKET_WRITABLE 50
+typedef struct KDEventSocketWritable {
+ KDSocket *socket;
+} KDEventSocketWritable;
+
+/* KD_EVENT_SOCKET_CONNECT_COMPLETE: Event generated when a socket connect is complete */
+#define KD_EVENT_SOCKET_CONNECT_COMPLETE 51
+typedef struct KDEventSocketConnect {
+ KDSocket *socket;
+ KDint32 error;
+} KDEventSocketConnect;
+
+/* KD_EVENT_SOCKET_INCOMING: Event generated when a listening socket detects an incoming connection or an error. */
+#define KD_EVENT_SOCKET_INCOMING 52
+typedef struct KDEventSocketIncoming {
+ KDSocket *socket;
+} KDEventSocketIncoming;
+
+/* KD_EVENT_NAME_LOOKUP_COMPLETE: kdNameLookup complete event. */
+#define KD_EVENT_NAME_LOOKUP_COMPLETE 53
+typedef struct KDEventNameLookup {
+ KDint32 error;
+ KDint32 resultlen;
+ const KDSockaddr *result;
+ KDboolean more;
+} KDEventNameLookup;
+
+/*******************************************************
+ * Input/output
+ *******************************************************/
+
+/* KD_EVENT_STATE: State changed event. */
+#define KD_EVENT_STATE 55
+
+typedef struct KDEventState {
+ KDint32 index;
+ union {
+ KDint32 i;
+ KDint64 l;
+ KDfloat32 f;
+ } value;
+} KDEventState;
+
+/* KD_EVENT_INPUT: Input changed event. */
+#define KD_EVENT_INPUT 56
+
+typedef struct KDEventInput {
+ KDint32 index;
+ union {
+ KDint32 i;
+ KDint64 l;
+ KDfloat32 f;
+ } value;
+} KDEventInput;
+
+/* KD_EVENT_INPUT_JOG: Jogdial jog event. */
+#define KD_EVENT_INPUT_JOG 71
+typedef struct KDEventInputJog {
+ KDint32 index;
+ KDint32 count;
+} KDEventInputJog;
+
+/* KD_EVENT_INPUT_POINTER: Pointer input changed event. */
+#define KD_EVENT_INPUT_POINTER 57
+typedef struct KDEventInputPointer {
+ KDint32 index;
+ KDint32 select;
+ KDint32 x;
+ KDint32 y;
+} KDEventInputPointer;
+
+/* KD_EVENT_INPUT_STICK: Joystick stick changed event. */
+#define KD_EVENT_INPUT_STICK 58
+typedef struct KDEventInputStick {
+ KDint32 index;
+ KDint32 x;
+ KDint32 y;
+ KDint32 z;
+} KDEventInputStick;
+
+/* kdStateGeti, kdStateGetl, kdStateGetf: get state value(s) */
+KD_API KDint KD_APIENTRY kdStateGeti(KDint startidx, KDuint numidxs, KDint32 *buffer);
+KD_API KDint KD_APIENTRY kdStateGetl(KDint startidx, KDuint numidxs, KDint64 *buffer);
+KD_API KDint KD_APIENTRY kdStateGetf(KDint startidx, KDuint numidxs, KDfloat32 *buffer);
+
+/* kdOutputSeti, kdOutputSetf: set outputs */
+KD_API KDint KD_APIENTRY kdOutputSeti(KDint startidx, KDuint numidxs, const KDint32 *buffer);
+KD_API KDint KD_APIENTRY kdOutputSetf(KDint startidx, KDuint numidxs, const KDfloat32 *buffer);
+#define KD_IO_CONTROLLER_STRIDE 64
+
+/* KD_IOGROUP_GAMEKEYS: I/O group for game keys. */
+#define KD_IOGROUP_GAMEKEYS 0x1000
+#define KD_STATE_GAMEKEYS_AVAILABILITY (KD_IOGROUP_GAMEKEYS + 0)
+#define KD_INPUT_GAMEKEYS_UP (KD_IOGROUP_GAMEKEYS + 1)
+#define KD_INPUT_GAMEKEYS_LEFT (KD_IOGROUP_GAMEKEYS + 2)
+#define KD_INPUT_GAMEKEYS_RIGHT (KD_IOGROUP_GAMEKEYS + 3)
+#define KD_INPUT_GAMEKEYS_DOWN (KD_IOGROUP_GAMEKEYS + 4)
+#define KD_INPUT_GAMEKEYS_FIRE (KD_IOGROUP_GAMEKEYS + 5)
+#define KD_INPUT_GAMEKEYS_A (KD_IOGROUP_GAMEKEYS + 6)
+#define KD_INPUT_GAMEKEYS_B (KD_IOGROUP_GAMEKEYS + 7)
+#define KD_INPUT_GAMEKEYS_C (KD_IOGROUP_GAMEKEYS + 8)
+#define KD_INPUT_GAMEKEYS_D (KD_IOGROUP_GAMEKEYS + 9)
+
+/* KD_IOGROUP_GAMEKEYSNC: I/O group for game keys, no chording. */
+#define KD_IOGROUP_GAMEKEYSNC 0x1100
+#define KD_STATE_GAMEKEYSNC_AVAILABILITY (KD_IOGROUP_GAMEKEYSNC + 0)
+#define KD_INPUT_GAMEKEYSNC_UP (KD_IOGROUP_GAMEKEYSNC + 1)
+#define KD_INPUT_GAMEKEYSNC_LEFT (KD_IOGROUP_GAMEKEYSNC + 2)
+#define KD_INPUT_GAMEKEYSNC_RIGHT (KD_IOGROUP_GAMEKEYSNC + 3)
+#define KD_INPUT_GAMEKEYSNC_DOWN (KD_IOGROUP_GAMEKEYSNC + 4)
+#define KD_INPUT_GAMEKEYSNC_FIRE (KD_IOGROUP_GAMEKEYSNC + 5)
+#define KD_INPUT_GAMEKEYSNC_A (KD_IOGROUP_GAMEKEYSNC + 6)
+#define KD_INPUT_GAMEKEYSNC_B (KD_IOGROUP_GAMEKEYSNC + 7)
+#define KD_INPUT_GAMEKEYSNC_C (KD_IOGROUP_GAMEKEYSNC + 8)
+#define KD_INPUT_GAMEKEYSNC_D (KD_IOGROUP_GAMEKEYSNC + 9)
+
+/* KD_IOGROUP_PHONEKEYPAD: I/O group for phone keypad. */
+#define KD_IOGROUP_PHONEKEYPAD 0x2000
+#define KD_STATE_PHONEKEYPAD_AVAILABILITY (KD_IOGROUP_PHONEKEYPAD + 0)
+#define KD_INPUT_PHONEKEYPAD_0 (KD_IOGROUP_PHONEKEYPAD + 1)
+#define KD_INPUT_PHONEKEYPAD_1 (KD_IOGROUP_PHONEKEYPAD + 2)
+#define KD_INPUT_PHONEKEYPAD_2 (KD_IOGROUP_PHONEKEYPAD + 3)
+#define KD_INPUT_PHONEKEYPAD_3 (KD_IOGROUP_PHONEKEYPAD + 4)
+#define KD_INPUT_PHONEKEYPAD_4 (KD_IOGROUP_PHONEKEYPAD + 5)
+#define KD_INPUT_PHONEKEYPAD_5 (KD_IOGROUP_PHONEKEYPAD + 6)
+#define KD_INPUT_PHONEKEYPAD_6 (KD_IOGROUP_PHONEKEYPAD + 7)
+#define KD_INPUT_PHONEKEYPAD_7 (KD_IOGROUP_PHONEKEYPAD + 8)
+#define KD_INPUT_PHONEKEYPAD_8 (KD_IOGROUP_PHONEKEYPAD + 9)
+#define KD_INPUT_PHONEKEYPAD_9 (KD_IOGROUP_PHONEKEYPAD + 10)
+#define KD_INPUT_PHONEKEYPAD_STAR (KD_IOGROUP_PHONEKEYPAD + 11)
+#define KD_INPUT_PHONEKEYPAD_HASH (KD_IOGROUP_PHONEKEYPAD + 12)
+#define KD_INPUT_PHONEKEYPAD_LEFTSOFT (KD_IOGROUP_PHONEKEYPAD + 13)
+#define KD_INPUT_PHONEKEYPAD_RIGHTSOFT (KD_IOGROUP_PHONEKEYPAD + 14)
+#define KD_STATE_PHONEKEYPAD_ORIENTATION (KD_IOGROUP_PHONEKEYPAD + 15)
+
+/* KD_IOGROUP_VIBRATE: I/O group for vibrate. */
+#define KD_IOGROUP_VIBRATE 0x3000
+#define KD_STATE_VIBRATE_AVAILABILITY (KD_IOGROUP_VIBRATE + 0)
+#define KD_STATE_VIBRATE_MINFREQUENCY (KD_IOGROUP_VIBRATE + 1)
+#define KD_STATE_VIBRATE_MAXFREQUENCY (KD_IOGROUP_VIBRATE + 2)
+#define KD_OUTPUT_VIBRATE_VOLUME (KD_IOGROUP_VIBRATE + 3)
+#define KD_OUTPUT_VIBRATE_FREQUENCY (KD_IOGROUP_VIBRATE + 4)
+
+/* KD_IOGROUP_POINTER: I/O group for pointer. */
+#define KD_IOGROUP_POINTER 0x4000
+#define KD_STATE_POINTER_AVAILABILITY (KD_IOGROUP_POINTER + 0)
+#define KD_INPUT_POINTER_X (KD_IOGROUP_POINTER + 1)
+#define KD_INPUT_POINTER_Y (KD_IOGROUP_POINTER + 2)
+#define KD_INPUT_POINTER_SELECT (KD_IOGROUP_POINTER + 3)
+
+/* KD_IOGROUP_BACKLIGHT: I/O group for backlight. */
+#define KD_IOGROUP_BACKLIGHT 0x5000
+#define KD_STATE_BACKLIGHT_AVAILABILITY (KD_IOGROUP_BACKLIGHT + 0)
+#define KD_OUTPUT_BACKLIGHT_FORCE (KD_IOGROUP_BACKLIGHT + 1)
+
+/* KD_IOGROUP_JOGDIAL: I/O group for a jog dial. */
+#define KD_IOGROUP_JOGDIAL 0x6000
+#define KD_STATE_JOGDIAL_AVAILABILITY (KD_IOGROUP_JOGDIAL + 0)
+#define KD_INPUT_JOGDIAL_UP (KD_IOGROUP_JOGDIAL + 1)
+#define KD_INPUT_JOGDIAL_LEFT (KD_IOGROUP_JOGDIAL + 2)
+#define KD_INPUT_JOGDIAL_RIGHT (KD_IOGROUP_JOGDIAL + 3)
+#define KD_INPUT_JOGDIAL_DOWN (KD_IOGROUP_JOGDIAL + 4)
+#define KD_INPUT_JOGDIAL_SELECT (KD_IOGROUP_JOGDIAL + 5)
+
+/* KD_IOGROUP_STICK: I/O group for joystick. */
+#define KD_IOGROUP_STICK 0x7000
+#define KD_STATE_STICK_AVAILABILITY (KD_IOGROUP_STICK + 0)
+#define KD_INPUT_STICK_X (KD_IOGROUP_STICK + 1)
+#define KD_INPUT_STICK_Y (KD_IOGROUP_STICK + 2)
+#define KD_INPUT_STICK_Z (KD_IOGROUP_STICK + 3)
+#define KD_INPUT_STICK_BUTTON (KD_IOGROUP_STICK + 4)
+#define KD_IO_STICK_STRIDE 8
+
+/* KD_IOGROUP_DPAD: I/O group for D-pad. */
+#define KD_IOGROUP_DPAD 0x8000
+#define KD_STATE_DPAD_AVAILABILITY (KD_IOGROUP_DPAD + 0)
+#define KD_STATE_DPAD_COPY (KD_IOGROUP_DPAD + 1)
+#define KD_INPUT_DPAD_UP (KD_IOGROUP_DPAD + 2)
+#define KD_INPUT_DPAD_LEFT (KD_IOGROUP_DPAD + 3)
+#define KD_INPUT_DPAD_RIGHT (KD_IOGROUP_DPAD + 4)
+#define KD_INPUT_DPAD_DOWN (KD_IOGROUP_DPAD + 5)
+#define KD_INPUT_DPAD_SELECT (KD_IOGROUP_DPAD + 6)
+#define KD_IO_DPAD_STRIDE 8
+
+/* KD_IOGROUP_BUTTONS: I/O group for buttons associated with joystick or D-pad. */
+#define KD_IOGROUP_BUTTONS 0x9000
+#define KD_STATE_BUTTONS_AVAILABILITY (KD_IOGROUP_BUTTONS + 0)
+#define KD_INPUT_BUTTONS_0 (KD_IOGROUP_BUTTONS + 1)
+
+/* KD_IO_UNDEFINED: I/O items reserved for implementation-dependent use. */
+#define KD_IO_UNDEFINED 0x40000000
+
+/*******************************************************
+ * Windowing
+ *******************************************************/
+#ifdef KD_WINDOW_SUPPORTED
+#include <EGL/egl.h>
+typedef struct KDWindow KDWindow;
+
+/* kdCreateWindow: Create a window. */
+KD_API KDWindow *KD_APIENTRY kdCreateWindow(EGLDisplay display, EGLConfig config, void *eventuserptr);
+
+/* kdDestroyWindow: Destroy a window. */
+KD_API KDint KD_APIENTRY kdDestroyWindow(KDWindow *window);
+
+/* kdSetWindowPropertybv, kdSetWindowPropertyiv, kdSetWindowPropertycv: Set a window property to request a change in the on-screen representation of the window. */
+KD_API KDint KD_APIENTRY kdSetWindowPropertybv(KDWindow *window, KDint pname, const KDboolean *param);
+KD_API KDint KD_APIENTRY kdSetWindowPropertyiv(KDWindow *window, KDint pname, const KDint32 *param);
+KD_API KDint KD_APIENTRY kdSetWindowPropertycv(KDWindow *window, KDint pname, const KDchar *param);
+
+/* kdGetWindowPropertybv, kdGetWindowPropertyiv, kdGetWindowPropertycv: Get the current value of a window property. */
+KD_API KDint KD_APIENTRY kdGetWindowPropertybv(KDWindow *window, KDint pname, KDboolean *param);
+KD_API KDint KD_APIENTRY kdGetWindowPropertyiv(KDWindow *window, KDint pname, KDint32 *param);
+KD_API KDint KD_APIENTRY kdGetWindowPropertycv(KDWindow *window, KDint pname, KDchar *param, KDsize *size);
+
+/* kdRealizeWindow: Realize the window as a displayable entity and get the native window handle for passing to EGL. */
+KD_API KDint KD_APIENTRY kdRealizeWindow(KDWindow *window, EGLNativeWindowType *nativewindow);
+
+/* KD_WINDOWPROPERTY_SIZE: Window client area width and height. */
+#define KD_WINDOWPROPERTY_SIZE 66
+
+/* KD_WINDOWPROPERTY_VISIBILITY: Window visibility status. */
+#define KD_WINDOWPROPERTY_VISIBILITY 67
+
+/* KD_WINDOWPROPERTY_FOCUS: Window input focus status. */
+#define KD_WINDOWPROPERTY_FOCUS 68
+
+/* KD_WINDOWPROPERTY_CAPTION: Window caption. */
+#define KD_WINDOWPROPERTY_CAPTION 69
+
+/* KD_EVENT_WINDOW_CLOSE: Event to request to close window. */
+#define KD_EVENT_WINDOW_CLOSE 44
+
+/* KD_EVENT_WINDOWPROPERTY_CHANGE: Notification about realized window property change. */
+#define KD_EVENT_WINDOWPROPERTY_CHANGE 47
+typedef struct KDEventWindowProperty {
+ KDint32 pname;
+} KDEventWindowProperty;
+
+/* KD_EVENT_WINDOW_FOCUS: Event for change of window&#8217;s focus state. */
+#define KD_EVENT_WINDOW_FOCUS 60
+typedef struct KDEventWindowFocus {
+ KDint32 focusstate;
+} KDEventWindowFocus;
+
+/* KD_EVENT_WINDOW_REDRAW: Event to notify need to redraw the window. */
+#define KD_EVENT_WINDOW_REDRAW 59
+#endif /* KD_WINDOW_SUPPORTED */
+
+/*******************************************************
+ * Assertions and logging
+ *******************************************************/
+
+/* kdHandleAssertion: Handle assertion failure. */
+KD_API void KD_APIENTRY kdHandleAssertion(const KDchar *condition, const KDchar *filename, KDint linenumber);
+
+/* kdLogMessage: Output a log message. */
+#ifdef KD_NDEBUG
+#define kdLogMessage(s)
+#else
+KD_API void KD_APIENTRY kdLogMessage(const KDchar *string);
+#endif
+
+/* struct KDEvent delayed to the end as it uses event data structs from
+ * other parts of the .h file. */
+struct KDEvent {
+ KDust timestamp;
+ KDint32 type;
+ void *userptr;
+ union KDEventData {
+ KDEventState state;
+ KDEventInput input;
+ KDEventInputJog inputjog;
+ KDEventInputPointer inputpointer;
+ KDEventInputStick inputstick;
+ KDEventSocketReadable socketreadable;
+ KDEventSocketWritable socketwritable;
+ KDEventSocketConnect socketconnect;
+ KDEventSocketIncoming socketincoming;
+ KDEventNameLookup namelookup;
+#ifdef KD_WINDOW_SUPPORTED
+ KDEventWindowProperty windowproperty;
+ KDEventWindowFocus windowfocus;
+#endif /* KD_WINDOW_SUPPORTED */
+ KDEventUser user;
+ } data;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __kd_h_ */
+