diff --git a/GLFW-b.cabal b/GLFW-b.cabal
--- a/GLFW-b.cabal
+++ b/GLFW-b.cabal
@@ -1,5 +1,5 @@
 name:         GLFW-b
-version:      0.0.1
+version:      0.0.2
 
 category:     Graphics
 
@@ -34,6 +34,10 @@
 extra-source-files:
   README.md
   glfw/include/GL/glfw.h
+  glfw/lib/internal.h
+  glfw/lib/cocoa/platform.h
+  glfw/lib/win32/platform.h
+  glfw/lib/x11/platform.h
 
 -- -- -- -- -- -- -- -- -- --
 
diff --git a/glfw/lib/cocoa/platform.h b/glfw/lib/cocoa/platform.h
new file mode 100644
--- /dev/null
+++ b/glfw/lib/cocoa/platform.h
@@ -0,0 +1,243 @@
+//========================================================================
+// GLFW - An OpenGL framework
+// File:        platform.h
+// Platform:    Mac OS X
+// API Version: 2.7
+// WWW:         http://glfw.sourceforge.net
+//------------------------------------------------------------------------
+// Copyright (c) 2002-2006 Camilla Berglund
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+
+#ifndef _platform_h_
+#define _platform_h_
+
+
+// This is the Mac OS X version of GLFW
+#define _GLFW_MAC_OS_X
+
+#if defined(__OBJC__)
+#import <Cocoa/Cocoa.h>
+#else
+typedef void *id;
+#endif
+
+#include <pthread.h>
+
+#include "../../include/GL/glfw.h"
+
+//========================================================================
+// GLFW platform specific types
+//========================================================================
+
+//------------------------------------------------------------------------
+// Pointer length integer
+//------------------------------------------------------------------------
+typedef intptr_t GLFWintptr;
+
+//------------------------------------------------------------------------
+// Window structure
+//------------------------------------------------------------------------
+typedef struct _GLFWwin_struct _GLFWwin;
+
+struct _GLFWwin_struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // User callback functions
+    GLFWwindowsizefun    windowSizeCallback;
+    GLFWwindowclosefun   windowCloseCallback;
+    GLFWwindowrefreshfun windowRefreshCallback;
+    GLFWmousebuttonfun   mouseButtonCallback;
+    GLFWmouseposfun      mousePosCallback;
+    GLFWmousewheelfun    mouseWheelCallback;
+    GLFWkeyfun           keyCallback;
+    GLFWcharfun          charCallback;
+
+    // User selected window settings
+    int       fullscreen;      // Fullscreen flag
+    int       mouseLock;       // Mouse-lock flag
+    int       autoPollEvents;  // Auto polling flag
+    int       sysKeysDisabled; // System keys disabled flag
+    int       windowNoResize;  // Resize- and maximize gadgets disabled flag
+    int       refreshRate;     // Vertical monitor refresh rate
+
+    // Window status & parameters
+    int       opened;          // Flag telling if window is opened or not
+    int       active;          // Application active flag
+    int       iconified;       // Window iconified flag
+    int       width, height;   // Window width and heigth
+    int       accelerated;     // GL_TRUE if window is HW accelerated
+
+    // Framebuffer attributes
+    int       redBits;
+    int       greenBits;
+    int       blueBits;
+    int       alphaBits;
+    int       depthBits;
+    int       stencilBits;
+    int       accumRedBits;
+    int       accumGreenBits;
+    int       accumBlueBits;
+    int       accumAlphaBits;
+    int       auxBuffers;
+    int       stereo;
+    int       samples;
+
+    // OpenGL extensions and context attributes
+    int       has_GL_SGIS_generate_mipmap;
+    int       has_GL_ARB_texture_non_power_of_two;
+    int       glMajor, glMinor, glRevision;
+    int       glForward, glDebug, glProfile;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    id        window;
+    id        pixelFormat;
+    id	      context;
+    id	      delegate;
+    unsigned int modifierFlags;
+};
+
+GLFWGLOBAL _GLFWwin _glfwWin;
+
+
+//------------------------------------------------------------------------
+// Library global data
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Window opening hints
+    _GLFWhints      hints;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Timer data
+    struct {
+        double t0;
+    } Timer;
+
+    // dlopen handle for dynamically-loading extension function pointers
+    void *OpenGLFramework;
+
+    int Unbundled;
+
+    id DesktopMode;
+
+    id AutoreleasePool;
+
+} _glfwLibrary;
+
+
+//------------------------------------------------------------------------
+// User input status (some of this should go in _GLFWwin)
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Mouse status
+    int  MousePosX, MousePosY;
+    int  WheelPos;
+    char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ];
+
+    // Keyboard status
+    char Key[ GLFW_KEY_LAST+1 ];
+    int  LastChar;
+
+    // User selected settings
+    int  StickyKeys;
+    int  StickyMouseButtons;
+    int  KeyRepeat;
+
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    double WheelPosFloating;
+
+} _glfwInput;
+
+//------------------------------------------------------------------------
+// Thread information
+//------------------------------------------------------------------------
+typedef struct _GLFWthread_struct _GLFWthread;
+
+// Thread record (one for each thread)
+struct _GLFWthread_struct {
+
+    // Pointer to previous and next threads in linked list
+    _GLFWthread   *Previous, *Next;
+
+    // GLFW user side thread information
+    GLFWthread    ID;
+    GLFWthreadfun Function;
+
+    // System side thread information
+    pthread_t     PosixID;
+};
+
+// General thread information
+GLFWGLOBAL struct {
+
+    // Critical section lock
+    pthread_mutex_t  CriticalSection;
+
+    // Next thread ID to use (increments for every created thread)
+    GLFWthread       NextID;
+
+    // First thread in linked list (always the main thread)
+    _GLFWthread      First;
+
+} _glfwThrd;
+
+
+//========================================================================
+// Macros for encapsulating critical code sections (i.e. making parts
+// of GLFW thread safe)
+//========================================================================
+
+// Define so we can use the same thread code as X11
+#define _glfw_numprocessors(n) { \
+    int mib[2], ncpu; \
+    size_t len = 1; \
+    mib[0] = CTL_HW; \
+    mib[1] = HW_NCPU; \
+    n      = 1; \
+    if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \
+    { \
+        if( len > 0 ) \
+        { \
+            n = ncpu; \
+        } \
+    } \
+}
+
+// Thread list management
+#define ENTER_THREAD_CRITICAL_SECTION \
+pthread_mutex_lock( &_glfwThrd.CriticalSection );
+#define LEAVE_THREAD_CRITICAL_SECTION \
+pthread_mutex_unlock( &_glfwThrd.CriticalSection );
+
+
+#endif // _platform_h_
diff --git a/glfw/lib/internal.h b/glfw/lib/internal.h
new file mode 100644
--- /dev/null
+++ b/glfw/lib/internal.h
@@ -0,0 +1,265 @@
+//========================================================================
+// GLFW - An OpenGL framework
+// File:        internal.h
+// Platform:    Any
+// API version: 2.7
+// WWW:         http://glfw.sourceforge.net
+//------------------------------------------------------------------------
+// Copyright (c) 2002-2006 Camilla Berglund
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+
+#ifndef _internal_h_
+#define _internal_h_
+
+//========================================================================
+// GLFWGLOBAL is a macro that places all global variables in the init.c
+// module (all other modules reference global variables as 'extern')
+//========================================================================
+
+#if defined( _init_c_ )
+#define GLFWGLOBAL
+#else
+#define GLFWGLOBAL extern
+#endif
+
+
+//========================================================================
+// Input handling definitions
+//========================================================================
+
+// Internal key and button state/action definitions
+#define GLFW_STICK 2
+
+
+//========================================================================
+// System independent include files
+//========================================================================
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+
+//------------------------------------------------------------------------
+// Window opening hints (set by glfwOpenWindowHint)
+// A bucket of semi-random stuff bunched together for historical reasons
+// This is used only by the platform independent code and only to store
+// parameters passed to us by glfwOpenWindowHint
+//------------------------------------------------------------------------
+typedef struct {
+    int         refreshRate;
+    int         accumRedBits;
+    int         accumGreenBits;
+    int         accumBlueBits;
+    int         accumAlphaBits;
+    int         auxBuffers;
+    int         stereo;
+    int         windowNoResize;
+    int         samples;
+    int         glMajor;
+    int         glMinor;
+    int         glForward;
+    int         glDebug;
+    int         glProfile;
+} _GLFWhints;
+
+
+//------------------------------------------------------------------------
+// Platform specific definitions goes in platform.h (which also includes
+// glfw.h)
+//------------------------------------------------------------------------
+
+#include "platform.h"
+
+
+//------------------------------------------------------------------------
+// Parameters relating to the creation of the context and window but not
+// directly related to the properties of the framebuffer
+// This is used to pass window and context creation parameters from the
+// platform independent code to the platform specific code
+//------------------------------------------------------------------------
+typedef struct {
+    int         mode;
+    int         refreshRate;
+    int         windowNoResize;
+    int         glMajor;
+    int         glMinor;
+    int         glForward;
+    int         glDebug;
+    int         glProfile;
+} _GLFWwndconfig;
+
+
+//------------------------------------------------------------------------
+// Framebuffer configuration descriptor, i.e. buffers and their sizes
+// Also a platform specific ID used to map back to the actual backend APIs
+// This is used to pass framebuffer parameters from the platform independent
+// code to the platform specific code, and also to enumerate and select
+// available framebuffer configurations
+//------------------------------------------------------------------------
+typedef struct {
+    int         redBits;
+    int         greenBits;
+    int         blueBits;
+    int         alphaBits;
+    int         depthBits;
+    int         stencilBits;
+    int         accumRedBits;
+    int         accumGreenBits;
+    int         accumBlueBits;
+    int         accumAlphaBits;
+    int         auxBuffers;
+    int         stereo;
+    int         samples;
+    GLFWintptr  platformID;
+} _GLFWfbconfig;
+
+
+//========================================================================
+// System independent global variables (GLFW internals)
+//========================================================================
+
+// Flag indicating if GLFW has been initialized
+#if defined( _init_c_ )
+int _glfwInitialized = 0;
+#else
+GLFWGLOBAL int _glfwInitialized;
+#endif
+
+
+//------------------------------------------------------------------------
+// Abstract data stream (for image I/O)
+//------------------------------------------------------------------------
+typedef struct {
+    FILE*   file;
+    void*   data;
+    long    position;
+    long    size;
+} _GLFWstream;
+
+
+//========================================================================
+// Prototypes for platform specific implementation functions
+//========================================================================
+
+// Init/terminate
+int _glfwPlatformInit( void );
+int _glfwPlatformTerminate( void );
+
+// Enable/Disable
+void _glfwPlatformEnableSystemKeys( void );
+void _glfwPlatformDisableSystemKeys( void );
+
+// Fullscreen
+int  _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount );
+void _glfwPlatformGetDesktopMode( GLFWvidmode *mode );
+
+// OpenGL extensions
+int _glfwPlatformExtensionSupported( const char *extension );
+void * _glfwPlatformGetProcAddress( const char *procname );
+
+// Joystick
+int _glfwPlatformGetJoystickParam( int joy, int param );
+int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes );
+int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons );
+
+// Threads
+GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg );
+void _glfwPlatformDestroyThread( GLFWthread ID );
+int _glfwPlatformWaitThread( GLFWthread ID, int waitmode );
+GLFWthread _glfwPlatformGetThreadID( void );
+GLFWmutex _glfwPlatformCreateMutex( void );
+void _glfwPlatformDestroyMutex( GLFWmutex mutex );
+void _glfwPlatformLockMutex( GLFWmutex mutex );
+void _glfwPlatformUnlockMutex( GLFWmutex mutex );
+GLFWcond _glfwPlatformCreateCond( void );
+void _glfwPlatformDestroyCond( GLFWcond cond );
+void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout );
+void _glfwPlatformSignalCond( GLFWcond cond );
+void _glfwPlatformBroadcastCond( GLFWcond cond );
+int _glfwPlatformGetNumberOfProcessors( void );
+
+// Time
+double _glfwPlatformGetTime( void );
+void _glfwPlatformSetTime( double time );
+void _glfwPlatformSleep( double time );
+
+// Window management
+int  _glfwPlatformOpenWindow( int width, int height, const _GLFWwndconfig *wndconfig, const _GLFWfbconfig *fbconfig );
+void _glfwPlatformCloseWindow( void );
+void _glfwPlatformSetWindowTitle( const char *title );
+void _glfwPlatformSetWindowSize( int width, int height );
+void _glfwPlatformSetWindowPos( int x, int y );
+void _glfwPlatformIconifyWindow( void );
+void _glfwPlatformRestoreWindow( void );
+void _glfwPlatformSwapBuffers( void );
+void _glfwPlatformSwapInterval( int interval );
+void _glfwPlatformRefreshWindowParams( void );
+void _glfwPlatformPollEvents( void );
+void _glfwPlatformWaitEvents( void );
+void _glfwPlatformHideMouseCursor( void );
+void _glfwPlatformShowMouseCursor( void );
+void _glfwPlatformSetMouseCursorPos( int x, int y );
+
+
+//========================================================================
+// Prototypes for platform independent internal functions
+//========================================================================
+
+// Window management (window.c)
+void _glfwClearWindowHints( void );
+
+// Input handling (window.c)
+void _glfwClearInput( void );
+void _glfwInputDeactivation( void );
+void _glfwInputKey( int key, int action );
+void _glfwInputChar( int character, int action );
+void _glfwInputMouseClick( int button, int action );
+
+// Threads (thread.c)
+_GLFWthread * _glfwGetThreadPointer( int ID );
+void _glfwAppendThread( _GLFWthread * t );
+void _glfwRemoveThread( _GLFWthread * t );
+
+// OpenGL extensions (glext.c)
+void _glfwParseGLVersion( int *major, int *minor, int *rev );
+int _glfwStringInExtensionString( const char *string, const GLubyte *extensions );
+
+// Abstracted data streams (stream.c)
+int _glfwOpenFileStream( _GLFWstream *stream, const char *name, const char *mode );
+int _glfwOpenBufferStream( _GLFWstream *stream, void *data, long size );
+long _glfwReadStream( _GLFWstream *stream, void *data, long size );
+long _glfwTellStream( _GLFWstream *stream );
+int _glfwSeekStream( _GLFWstream *stream, long offset, int whence );
+void _glfwCloseStream( _GLFWstream *stream );
+
+// Targa image I/O (tga.c)
+int _glfwReadTGA( _GLFWstream *s, GLFWimage *img, int flags );
+
+// Framebuffer configs
+const _GLFWfbconfig *_glfwChooseFBConfig( const _GLFWfbconfig *desired,
+                                          const _GLFWfbconfig *alternatives,
+                                          unsigned int count );
+
+
+#endif // _internal_h_
diff --git a/glfw/lib/win32/platform.h b/glfw/lib/win32/platform.h
new file mode 100644
--- /dev/null
+++ b/glfw/lib/win32/platform.h
@@ -0,0 +1,530 @@
+//========================================================================
+// GLFW - An OpenGL framework
+// File:        platform.h
+// Platform:    Windows
+// API version: 2.7
+// WWW:         http://glfw.sourceforge.net
+//------------------------------------------------------------------------
+// Copyright (c) 2002-2006 Camilla Berglund
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+
+#ifndef _platform_h_
+#define _platform_h_
+
+
+// This is the Windows version of GLFW
+#define _GLFW_WIN32
+
+// We don't need all the fancy stuff
+#define NOMINMAX
+#define WIN32_LEAN_AND_MEAN
+#define VC_EXTRALEAN
+
+// Include files
+#include <windows.h>
+#include <mmsystem.h>
+#include "../../include/GL/glfw.h"
+
+
+//========================================================================
+// Hack: Define things that some <windows.h>'s do not define
+//========================================================================
+
+// Some old versions of w32api (used by MinGW and Cygwin) define
+// WH_KEYBOARD_LL without typedef:ing KBDLLHOOKSTRUCT (!)
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#include <w32api.h>
+#if defined(WH_KEYBOARD_LL) && (__W32API_MAJOR_VERSION == 1) && (__W32API_MINOR_VERSION <= 2)
+#undef WH_KEYBOARD_LL
+#endif
+#endif
+
+//------------------------------------------------------------------------
+// ** NOTE **  If this gives you compiler errors and you are using MinGW
+// (or Dev-C++), update to w32api version 1.3 or later:
+// http://sourceforge.net/project/showfiles.php?group_id=2435
+//------------------------------------------------------------------------
+#ifndef WH_KEYBOARD_LL
+#define WH_KEYBOARD_LL 13
+typedef struct tagKBDLLHOOKSTRUCT {
+  DWORD   vkCode;
+  DWORD   scanCode;
+  DWORD   flags;
+  DWORD   time;
+  DWORD   dwExtraInfo;
+} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
+#endif // WH_KEYBOARD_LL
+
+#ifndef LLKHF_ALTDOWN
+#define LLKHF_ALTDOWN  0x00000020
+#endif
+
+#ifndef SPI_SETSCREENSAVERRUNNING
+#define SPI_SETSCREENSAVERRUNNING 97
+#endif
+#ifndef SPI_GETANIMATION
+#define SPI_GETANIMATION 72
+#endif
+#ifndef SPI_SETANIMATION
+#define SPI_SETANIMATION 73
+#endif
+#ifndef SPI_GETFOREGROUNDLOCKTIMEOUT
+#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000
+#endif
+#ifndef SPI_SETFOREGROUNDLOCKTIMEOUT
+#define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001
+#endif
+
+#ifndef CDS_FULLSCREEN
+#define CDS_FULLSCREEN 4
+#endif
+
+#ifndef PFD_GENERIC_ACCELERATED
+#define PFD_GENERIC_ACCELERATED 0x00001000
+#endif
+#ifndef PFD_DEPTH_DONTCARE
+#define PFD_DEPTH_DONTCARE 0x20000000
+#endif
+
+#ifndef ENUM_CURRENT_SETTINGS
+#define ENUM_CURRENT_SETTINGS -1
+#endif
+#ifndef ENUM_REGISTRY_SETTINGS
+#define ENUM_REGISTRY_SETTINGS -2
+#endif
+
+#ifndef WM_MOUSEWHEEL
+#define WM_MOUSEWHEEL 0x020A
+#endif
+#ifndef WHEEL_DELTA
+#define WHEEL_DELTA 120
+#endif
+
+#ifndef WM_XBUTTONDOWN
+#define WM_XBUTTONDOWN 0x020B
+#endif
+#ifndef WM_XBUTTONUP
+#define WM_XBUTTONUP 0x020C
+#endif
+#ifndef XBUTTON1
+#define XBUTTON1 1
+#endif
+#ifndef XBUTTON2
+#define XBUTTON2 2
+#endif
+
+#ifndef WGL_ARB_pixel_format
+
+// wglSwapIntervalEXT typedef (Win32 buffer-swap interval control)
+typedef int (APIENTRY * WGLSWAPINTERVALEXT_T) (int);
+// wglGetPixelFormatAttribivARB typedef
+typedef BOOL (WINAPI * WGLGETPIXELFORMATATTRIBIVARB_T) (HDC, int, int, UINT, const int *, int *);
+// wglGetExtensionStringEXT typedef
+typedef const char *(APIENTRY * WGLGETEXTENSIONSSTRINGEXT_T)( void );
+// wglGetExtensionStringARB typedef
+typedef const char *(APIENTRY * WGLGETEXTENSIONSSTRINGARB_T)( HDC );
+
+/* Constants for wglGetPixelFormatAttribivARB */
+#define WGL_NUMBER_PIXEL_FORMATS_ARB    0x2000
+#define WGL_DRAW_TO_WINDOW_ARB          0x2001
+#define WGL_SUPPORT_OPENGL_ARB          0x2010
+#define WGL_ACCELERATION_ARB            0x2003
+#define WGL_DOUBLE_BUFFER_ARB           0x2011
+#define WGL_STEREO_ARB                  0x2012
+#define WGL_PIXEL_TYPE_ARB              0x2013
+#define WGL_COLOR_BITS_ARB              0x2014
+#define WGL_RED_BITS_ARB                0x2015
+#define WGL_GREEN_BITS_ARB              0x2017
+#define WGL_BLUE_BITS_ARB               0x2019
+#define WGL_ALPHA_BITS_ARB              0x201B
+#define WGL_ACCUM_BITS_ARB              0x201D
+#define WGL_ACCUM_RED_BITS_ARB          0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB        0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB         0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB        0x2021
+#define WGL_DEPTH_BITS_ARB              0x2022
+#define WGL_STENCIL_BITS_ARB            0x2023
+#define WGL_AUX_BUFFERS_ARB             0x2024
+#define WGL_SAMPLE_BUFFERS_ARB          0x2041
+#define WGL_SAMPLES_ARB                 0x2042
+
+/* Constants for WGL_ACCELERATION_ARB */
+#define WGL_NO_ACCELERATION_ARB         0x2025
+#define WGL_GENERIC_ACCELERATION_ARB    0x2026
+#define WGL_FULL_ACCELERATION_ARB       0x2027
+
+/* Constants for WGL_PIXEL_TYPE_ARB */
+#define WGL_TYPE_RGBA_ARB               0x202B
+#define WGL_TYPE_COLORINDEX_ARB         0x202C
+
+#endif /*WGL_ARB_pixel_format*/
+
+
+#ifndef WGL_ARB_create_context
+
+/* wglCreateContextAttribsARB */
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC, HGLRC, const int *);
+
+/* Tokens for wglCreateContextAttribsARB attributes */
+#define WGL_CONTEXT_MAJOR_VERSION_ARB          0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB          0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB            0x2093
+#define WGL_CONTEXT_FLAGS_ARB                  0x2094
+#define WGL_CONTEXT_PROFILE_MASK_ARB           0x9126
+
+/* Bits for WGL_CONTEXT_FLAGS_ARB */
+#define WGL_CONTEXT_DEBUG_BIT_ARB              0x0001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
+
+/* Bits for WGL_CONTEXT_PROFILE_MASK_ARB */
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB          0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+
+#endif /*WGL_ARB_create_context*/
+
+
+//========================================================================
+// DLLs that are loaded at glfwInit()
+//========================================================================
+
+// gdi32.dll function pointer typedefs
+#ifndef _GLFW_NO_DLOAD_GDI32
+typedef int  (WINAPI * CHOOSEPIXELFORMAT_T) (HDC,CONST PIXELFORMATDESCRIPTOR*);
+typedef int  (WINAPI * DESCRIBEPIXELFORMAT_T) (HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);
+typedef int  (WINAPI * GETPIXELFORMAT_T) (HDC);
+typedef BOOL (WINAPI * SETPIXELFORMAT_T) (HDC,int,const PIXELFORMATDESCRIPTOR*);
+typedef BOOL (WINAPI * SWAPBUFFERS_T) (HDC);
+#endif // _GLFW_NO_DLOAD_GDI32
+
+// winmm.dll function pointer typedefs
+#ifndef _GLFW_NO_DLOAD_WINMM
+typedef MMRESULT (WINAPI * JOYGETDEVCAPSA_T) (UINT,LPJOYCAPSA,UINT);
+typedef MMRESULT (WINAPI * JOYGETPOS_T) (UINT,LPJOYINFO);
+typedef MMRESULT (WINAPI * JOYGETPOSEX_T) (UINT,LPJOYINFOEX);
+typedef DWORD (WINAPI * TIMEGETTIME_T) (void);
+#endif // _GLFW_NO_DLOAD_WINMM
+
+
+// gdi32.dll shortcuts
+#ifndef _GLFW_NO_DLOAD_GDI32
+#define _glfw_ChoosePixelFormat   _glfwLibrary.Libs.ChoosePixelFormat
+#define _glfw_DescribePixelFormat _glfwLibrary.Libs.DescribePixelFormat
+#define _glfw_GetPixelFormat      _glfwLibrary.Libs.GetPixelFormat
+#define _glfw_SetPixelFormat      _glfwLibrary.Libs.SetPixelFormat
+#define _glfw_SwapBuffers         _glfwLibrary.Libs.SwapBuffers
+#else
+#define _glfw_ChoosePixelFormat   ChoosePixelFormat
+#define _glfw_DescribePixelFormat DescribePixelFormat
+#define _glfw_GetPixelFormat      GetPixelFormat
+#define _glfw_SetPixelFormat      SetPixelFormat
+#define _glfw_SwapBuffers         SwapBuffers
+#endif // _GLFW_NO_DLOAD_GDI32
+
+// winmm.dll shortcuts
+#ifndef _GLFW_NO_DLOAD_WINMM
+#define _glfw_joyGetDevCaps _glfwLibrary.Libs.joyGetDevCapsA
+#define _glfw_joyGetPos     _glfwLibrary.Libs.joyGetPos
+#define _glfw_joyGetPosEx   _glfwLibrary.Libs.joyGetPosEx
+#define _glfw_timeGetTime   _glfwLibrary.Libs.timeGetTime
+#else
+#define _glfw_joyGetDevCaps joyGetDevCapsA
+#define _glfw_joyGetPos     joyGetPos
+#define _glfw_joyGetPosEx   joyGetPosEx
+#define _glfw_timeGetTime   timeGetTime
+#endif // _GLFW_NO_DLOAD_WINMM
+
+
+//========================================================================
+// GLFW platform specific types
+//========================================================================
+
+//------------------------------------------------------------------------
+// Pointer length integer
+//------------------------------------------------------------------------
+typedef INT_PTR GLFWintptr;
+
+
+//------------------------------------------------------------------------
+// Window structure
+//------------------------------------------------------------------------
+typedef struct _GLFWwin_struct _GLFWwin;
+
+struct _GLFWwin_struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // User callback functions
+    GLFWwindowsizefun    windowSizeCallback;
+    GLFWwindowclosefun   windowCloseCallback;
+    GLFWwindowrefreshfun windowRefreshCallback;
+    GLFWmousebuttonfun   mouseButtonCallback;
+    GLFWmouseposfun      mousePosCallback;
+    GLFWmousewheelfun    mouseWheelCallback;
+    GLFWkeyfun           keyCallback;
+    GLFWcharfun          charCallback;
+
+    // User selected window settings
+    int       fullscreen;      // Fullscreen flag
+    int       mouseLock;       // Mouse-lock flag
+    int       autoPollEvents;  // Auto polling flag
+    int       sysKeysDisabled; // System keys disabled flag
+    int       windowNoResize;  // Resize- and maximize gadgets disabled flag
+    int       refreshRate;     // Vertical monitor refresh rate
+
+    // Window status & parameters
+    int       opened;          // Flag telling if window is opened or not
+    int       active;          // Application active flag
+    int       iconified;       // Window iconified flag
+    int       width, height;   // Window width and heigth
+    int       accelerated;     // GL_TRUE if window is HW accelerated
+
+    // Framebuffer attributes
+    int       redBits;
+    int       greenBits;
+    int       blueBits;
+    int       alphaBits;
+    int       depthBits;
+    int       stencilBits;
+    int       accumRedBits;
+    int       accumGreenBits;
+    int       accumBlueBits;
+    int       accumAlphaBits;
+    int       auxBuffers;
+    int       stereo;
+    int       samples;
+
+    // OpenGL extensions and context attributes
+    int       has_GL_SGIS_generate_mipmap;
+    int       has_GL_ARB_texture_non_power_of_two;
+    int       glMajor, glMinor, glRevision;
+    int       glForward, glDebug, glProfile;
+
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Platform specific window resources
+    HDC       DC;              // Private GDI device context
+    HGLRC     context;         // Permanent rendering context
+    HWND      window;          // Window handle
+    ATOM      classAtom;       // Window class atom
+    int       modeID;          // Mode ID for fullscreen mode
+    HHOOK     keyboardHook;    // Keyboard hook handle
+    DWORD     dwStyle;         // Window styles used for window creation
+    DWORD     dwExStyle;       // --"--
+
+    // Platform specific extensions (context specific)
+    WGLSWAPINTERVALEXT_T           SwapIntervalEXT;
+    WGLGETPIXELFORMATATTRIBIVARB_T GetPixelFormatAttribivARB;
+    WGLGETEXTENSIONSSTRINGEXT_T    GetExtensionsStringEXT;
+    WGLGETEXTENSIONSSTRINGARB_T    GetExtensionsStringARB;
+    PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
+    GLboolean                      has_WGL_EXT_swap_control;
+    GLboolean                      has_WGL_ARB_multisample;
+    GLboolean                      has_WGL_ARB_pixel_format;
+    GLboolean                      has_WGL_ARB_create_context;
+
+    // Various platform specific internal variables
+    int       oldMouseLock;    // Old mouse-lock flag (used for remembering
+                               // mouse-lock state when iconifying)
+    int       oldMouseLockValid;
+    int       desiredRefreshRate; // Desired vertical monitor refresh rate
+
+};
+
+GLFWGLOBAL _GLFWwin _glfwWin;
+
+
+//------------------------------------------------------------------------
+// User input status (most of this should go in _GLFWwin)
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Mouse status
+    int  MousePosX, MousePosY;
+    int  WheelPos;
+    char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ];
+
+    // Keyboard status
+    char Key[ GLFW_KEY_LAST+1 ];
+    int  LastChar;
+
+    // User selected settings
+    int  StickyKeys;
+    int  StickyMouseButtons;
+    int  KeyRepeat;
+
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Platform specific internal variables
+    int  MouseMoved, OldMouseX, OldMouseY;
+
+} _glfwInput;
+
+
+//------------------------------------------------------------------------
+// Library global data
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+    // Window opening hints
+    _GLFWhints      hints;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+  HINSTANCE instance;        // Instance of the application
+
+  // Timer data
+  struct {
+      int          HasPerformanceCounter;
+      double       Resolution;
+      unsigned int t0_32;
+      __int64      t0_64;
+  } Timer;
+
+  // System information
+  struct {
+      int     winVer;
+      int     hasUnicode;
+      DWORD   foregroundLockTimeout;
+  } Sys;
+
+#if !defined(_GLFW_NO_DLOAD_WINMM) || !defined(_GLFW_NO_DLOAD_GDI32)
+  // Library handles and function pointers
+  struct {
+#ifndef _GLFW_NO_DLOAD_GDI32
+      // gdi32.dll
+      HINSTANCE             gdi32;
+      CHOOSEPIXELFORMAT_T   ChoosePixelFormat;
+      DESCRIBEPIXELFORMAT_T DescribePixelFormat;
+      GETPIXELFORMAT_T      GetPixelFormat;
+      SETPIXELFORMAT_T      SetPixelFormat;
+      SWAPBUFFERS_T         SwapBuffers;
+#endif // _GLFW_NO_DLOAD_GDI32
+
+      // winmm.dll
+#ifndef _GLFW_NO_DLOAD_WINMM
+      HINSTANCE             winmm;
+      JOYGETDEVCAPSA_T      joyGetDevCapsA;
+      JOYGETPOS_T           joyGetPos;
+      JOYGETPOSEX_T         joyGetPosEx;
+      TIMEGETTIME_T         timeGetTime;
+#endif // _GLFW_NO_DLOAD_WINMM
+  } Libs;
+#endif
+
+} _glfwLibrary;
+
+
+//------------------------------------------------------------------------
+// Thread record (one for each thread)
+//------------------------------------------------------------------------
+typedef struct _GLFWthread_struct _GLFWthread;
+
+struct _GLFWthread_struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Pointer to previous and next threads in linked list
+    _GLFWthread   *Previous, *Next;
+
+    // GLFW user side thread information
+    GLFWthread    ID;
+    GLFWthreadfun Function;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // System side thread information
+    HANDLE        Handle;
+    DWORD         WinID;
+
+};
+
+
+//------------------------------------------------------------------------
+// General thread information
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Next thread ID to use (increments for every created thread)
+    GLFWthread       NextID;
+
+    // First thread in linked list (always the main thread)
+    _GLFWthread      First;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Critical section lock
+    CRITICAL_SECTION CriticalSection;
+
+} _glfwThrd;
+
+
+
+//========================================================================
+// Macros for encapsulating critical code sections (i.e. making parts
+// of GLFW thread safe)
+//========================================================================
+
+// Thread list management
+#define ENTER_THREAD_CRITICAL_SECTION \
+        EnterCriticalSection( &_glfwThrd.CriticalSection );
+#define LEAVE_THREAD_CRITICAL_SECTION \
+        LeaveCriticalSection( &_glfwThrd.CriticalSection );
+
+
+//========================================================================
+// Various Windows version constants
+//========================================================================
+
+#define _GLFW_WIN_UNKNOWN    0x0000  // Earlier than 95 or NT4
+#define _GLFW_WIN_95         0x0001
+#define _GLFW_WIN_98         0x0002
+#define _GLFW_WIN_ME         0x0003
+#define _GLFW_WIN_UNKNOWN_9x 0x0004  // Later than ME
+#define _GLFW_WIN_NT4        0x0101
+#define _GLFW_WIN_2K         0x0102
+#define _GLFW_WIN_XP         0x0103
+#define _GLFW_WIN_NET_SERVER 0x0104
+#define _GLFW_WIN_UNKNOWN_NT 0x0105  // Later than .NET Server
+
+
+//========================================================================
+// Prototypes for platform specific internal functions
+//========================================================================
+
+// Time
+void _glfwInitTimer( void );
+
+// Fullscreen support
+int _glfwGetClosestVideoModeBPP( int *w, int *h, int *bpp, int *refresh );
+int _glfwGetClosestVideoMode( int *w, int *h, int *r, int *g, int *b, int *refresh );
+void _glfwSetVideoModeMODE( int mode );
+void _glfwSetVideoMode( int *w, int *h, int r, int g, int b, int refresh );
+
+
+#endif // _platform_h_
diff --git a/glfw/lib/x11/platform.h b/glfw/lib/x11/platform.h
new file mode 100644
--- /dev/null
+++ b/glfw/lib/x11/platform.h
@@ -0,0 +1,484 @@
+//========================================================================
+// GLFW - An OpenGL framework
+// File:        platform.h
+// Platform:    X11 (Unix)
+// API version: 2.7
+// WWW:         http://glfw.sourceforge.net
+//------------------------------------------------------------------------
+// Copyright (c) 2002-2006 Camilla Berglund
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+
+#ifndef _platform_h_
+#define _platform_h_
+
+
+// This is the X11 version of GLFW
+#define _GLFW_X11
+
+
+// Include files
+#include <sys/time.h>
+#include <unistd.h>
+#include <signal.h>
+#include <X11/Xlib.h>
+#include <X11/keysym.h>
+#include <X11/Xatom.h>
+#include <GL/glx.h>
+#include "../../include/GL/glfw.h"
+
+// Do we have pthread support?
+#ifdef _GLFW_HAS_PTHREAD
+ #include <pthread.h>
+ #include <sched.h>
+#endif
+
+// We need declarations for GLX version 1.3 or above even if the server doesn't
+// support version 1.3
+#ifndef GLX_VERSION_1_3
+ #error "GLX header version 1.3 or above is required"
+#endif
+
+// With XFree86, we can use the XF86VidMode extension
+#if defined( _GLFW_HAS_XF86VIDMODE )
+ #include <X11/extensions/xf86vmode.h>
+#endif
+
+#if defined( _GLFW_HAS_XRANDR )
+ #include <X11/extensions/Xrandr.h>
+#endif
+
+// Do we have support for dlopen/dlsym?
+#if defined( _GLFW_HAS_DLOPEN )
+ #include <dlfcn.h>
+#endif
+
+// We support two different ways for getting the number of processors in
+// the system: sysconf (POSIX) and sysctl (BSD?)
+#if defined( _GLFW_HAS_SYSCONF )
+
+ // Use a single constant for querying number of online processors using
+ // the sysconf function (e.g. SGI defines _SC_NPROC_ONLN instead of
+ // _SC_NPROCESSORS_ONLN)
+ #ifndef _SC_NPROCESSORS_ONLN
+  #ifdef  _SC_NPROC_ONLN
+   #define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN
+  #else
+   #error POSIX constant _SC_NPROCESSORS_ONLN not defined!
+  #endif
+ #endif
+
+ // Macro for querying the number of processors
+ #define _glfw_numprocessors(n) n=(int)sysconf(_SC_NPROCESSORS_ONLN)
+
+#elif defined( _GLFW_HAS_SYSCTL )
+
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+
+ // Macro for querying the number of processors
+ #define _glfw_numprocessors(n) { \
+    int mib[2], ncpu; \
+    size_t len = 1; \
+    mib[0] = CTL_HW; \
+    mib[1] = HW_NCPU; \
+    n      = 1; \
+    if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \
+    { \
+        if( len > 0 ) \
+        { \
+            n = ncpu; \
+        } \
+    } \
+ }
+
+#else
+
+ // If neither sysconf nor sysctl is supported, assume single processor
+ // system
+ #define _glfw_numprocessors(n) n=1
+
+#endif
+
+// Pointer length integer
+// One day, this will most likely move into glfw.h
+typedef intptr_t GLFWintptr;
+
+
+#ifndef GLX_SGI_swap_control
+
+// Function signature for GLX_SGI_swap_control
+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+
+#endif /*GLX_SGI_swap_control*/
+
+
+#ifndef GLX_SGIX_fbconfig
+
+/* Type definitions for GLX_SGIX_fbconfig */
+typedef XID GLXFBConfigIDSGIX;
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+
+/* Function signatures for GLX_SGIX_fbconfig */
+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
+
+/* Tokens for GLX_SGIX_fbconfig */
+#define GLX_WINDOW_BIT_SGIX                0x00000001
+#define GLX_PIXMAP_BIT_SGIX                0x00000002
+#define GLX_RGBA_BIT_SGIX                  0x00000001
+#define GLX_COLOR_INDEX_BIT_SGIX           0x00000002
+#define GLX_DRAWABLE_TYPE_SGIX             0x8010
+#define GLX_RENDER_TYPE_SGIX               0x8011
+#define GLX_X_RENDERABLE_SGIX              0x8012
+#define GLX_FBCONFIG_ID_SGIX               0x8013
+#define GLX_RGBA_TYPE_SGIX                 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX          0x8015
+#define GLX_SCREEN_EXT                     0x800C
+
+#endif /*GLX_SGIX_fbconfig*/
+
+
+#ifndef GLX_ARB_create_context
+
+/* Tokens for glXCreateContextAttribsARB attributes */
+#define GLX_CONTEXT_MAJOR_VERSION_ARB           0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB           0x2092
+#define GLX_CONTEXT_FLAGS_ARB                   0x2094
+
+/* Bits for WGL_CONTEXT_FLAGS_ARB */
+#define GLX_CONTEXT_DEBUG_BIT_ARB               0x0001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB  0x0002
+
+/* Prototype for glXCreateContextAttribs */
+typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)( Display *display, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+
+#endif /*GLX_ARB_create_context*/
+
+
+#ifndef GLX_ARB_create_context_profile
+
+/* Tokens for glXCreateContextAttribsARB attributes */
+#define GLX_CONTEXT_PROFILE_MASK_ARB            0x9126
+
+/* BIts for GLX_CONTEXT_PROFILE_MASK_ARB */
+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB        0x00000001
+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+
+#endif /*GLX_ARB_create_context_profile*/
+
+
+//========================================================================
+// Global variables (GLFW internals)
+//========================================================================
+
+//------------------------------------------------------------------------
+// Window structure
+//------------------------------------------------------------------------
+typedef struct _GLFWwin_struct _GLFWwin;
+
+struct _GLFWwin_struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // User callback functions
+    GLFWwindowsizefun    windowSizeCallback;
+    GLFWwindowclosefun   windowCloseCallback;
+    GLFWwindowrefreshfun windowRefreshCallback;
+    GLFWmousebuttonfun   mouseButtonCallback;
+    GLFWmouseposfun      mousePosCallback;
+    GLFWmousewheelfun    mouseWheelCallback;
+    GLFWkeyfun           keyCallback;
+    GLFWcharfun          charCallback;
+
+    // User selected window settings
+    int       fullscreen;      // Fullscreen flag
+    int       mouseLock;       // Mouse-lock flag
+    int       autoPollEvents;  // Auto polling flag
+    int       sysKeysDisabled; // System keys disabled flag
+    int       windowNoResize;  // Resize- and maximize gadgets disabled flag
+    int       refreshRate;     // Vertical monitor refresh rate
+
+    // Window status & parameters
+    int       opened;          // Flag telling if window is opened or not
+    int       active;          // Application active flag
+    int       iconified;       // Window iconified flag
+    int       width, height;   // Window width and heigth
+    int       accelerated;     // GL_TRUE if window is HW accelerated
+
+    // Framebuffer attributes
+    int       redBits;
+    int       greenBits;
+    int       blueBits;
+    int       alphaBits;
+    int       depthBits;
+    int       stencilBits;
+    int       accumRedBits;
+    int       accumGreenBits;
+    int       accumBlueBits;
+    int       accumAlphaBits;
+    int       auxBuffers;
+    int       stereo;
+    int       samples;
+
+    // OpenGL extensions and context attributes
+    int       has_GL_SGIS_generate_mipmap;
+    int       has_GL_ARB_texture_non_power_of_two;
+    int       glMajor, glMinor, glRevision;
+    int       glForward, glDebug, glProfile;
+
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Platform specific window resources
+    Colormap      colormap;        // Window colormap:
+    Window        window;          // Window
+    int           screen;          // Screen ID
+    XVisualInfo  *visual;          // Visual
+    GLXFBConfigID fbconfigID;      // ID of the selected GLXFBConfig
+    GLXContext    context;         // OpenGL rendering context
+    Atom          WMDeleteWindow;  // For WM close detection
+    Atom          WMPing;          // For WM ping response
+
+    // GLX extensions
+    PFNGLXSWAPINTERVALSGIPROC             SwapIntervalSGI;
+    PFNGLXGETFBCONFIGATTRIBSGIXPROC       GetFBConfigAttribSGIX;
+    PFNGLXCHOOSEFBCONFIGSGIXPROC          ChooseFBConfigSGIX;
+    PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC CreateContextWithConfigSGIX;
+    PFNGLXGETVISUALFROMFBCONFIGSGIXPROC   GetVisualFromFBConfigSGIX;
+    PFNGLXCREATECONTEXTATTRIBSARBPROC     CreateContextAttribsARB;
+    GLboolean   has_GLX_SGIX_fbconfig;
+    GLboolean   has_GLX_SGI_swap_control;
+    GLboolean   has_GLX_ARB_multisample;
+    GLboolean   has_GLX_ARB_create_context;
+    GLboolean   has_GLX_ARB_create_context_profile;
+
+    // Various platform specific internal variables
+    int         overrideRedirect; // True if window is OverrideRedirect
+    int         keyboardGrabbed; // True if keyboard is currently grabbed
+    int         pointerGrabbed;  // True if pointer is currently grabbed
+    int         pointerHidden;   // True if pointer is currently hidden
+    int         mapNotifyCount;  // Used for during processing
+    int         focusInCount;    // Used for during processing
+
+    // Screensaver data
+    struct {
+        int     changed;
+        int     timeout;
+        int     interval;
+        int     blanking;
+        int     exposure;
+    } Saver;
+
+    // Fullscreen data
+    struct {
+        int     modeChanged;
+#if defined( _GLFW_HAS_XF86VIDMODE )
+        XF86VidModeModeInfo oldMode;
+#endif
+#if defined( _GLFW_HAS_XRANDR )
+        SizeID   oldSizeID;
+        int      oldWidth;
+        int      oldHeight;
+        Rotation oldRotation;
+#endif
+    } FS;
+};
+
+GLFWGLOBAL _GLFWwin _glfwWin;
+
+
+//------------------------------------------------------------------------
+// User input status (most of this should go in _GLFWwin)
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Mouse status
+    int  MousePosX, MousePosY;
+    int  WheelPos;
+    char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ];
+
+    // Keyboard status
+    char Key[ GLFW_KEY_LAST+1 ];
+    int  LastChar;
+
+    // User selected settings
+    int  StickyKeys;
+    int  StickyMouseButtons;
+    int  KeyRepeat;
+
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Platform specific internal variables
+    int  MouseMoved, CursorPosX, CursorPosY;
+
+} _glfwInput;
+
+
+//------------------------------------------------------------------------
+// Library global data
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Window opening hints
+    _GLFWhints      hints;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    Display        *display;
+
+    // Server-side GLX version
+    int             glxMajor, glxMinor;
+
+    struct {
+        int         available;
+        int         eventBase;
+        int         errorBase;
+    } XF86VidMode;
+
+    struct {
+        int         available;
+        int         eventBase;
+        int         errorBase;
+    } XRandR;
+
+    // Timer data
+    struct {
+        double      resolution;
+        long long   t0;
+    } Timer;
+
+#if defined(_GLFW_DLOPEN_LIBGL)
+    struct {
+        void       *libGL;  // dlopen handle for libGL.so
+    } Libs;
+#endif
+} _glfwLibrary;
+
+
+//------------------------------------------------------------------------
+// Thread record (one for each thread)
+//------------------------------------------------------------------------
+typedef struct _GLFWthread_struct _GLFWthread;
+
+struct _GLFWthread_struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Pointer to previous and next threads in linked list
+    _GLFWthread   *Previous, *Next;
+
+    // GLFW user side thread information
+    GLFWthread    ID;
+    GLFWthreadfun Function;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // System side thread information
+#ifdef _GLFW_HAS_PTHREAD
+    pthread_t     PosixID;
+#endif
+
+};
+
+
+//------------------------------------------------------------------------
+// General thread information
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+
+// ========= PLATFORM INDEPENDENT MANDATORY PART =========================
+
+    // Next thread ID to use (increments for every created thread)
+    GLFWthread       NextID;
+
+    // First thread in linked list (always the main thread)
+    _GLFWthread      First;
+
+// ========= PLATFORM SPECIFIC PART ======================================
+
+    // Critical section lock
+#ifdef _GLFW_HAS_PTHREAD
+    pthread_mutex_t  CriticalSection;
+#endif
+
+} _glfwThrd;
+
+
+//------------------------------------------------------------------------
+// Joystick information & state
+//------------------------------------------------------------------------
+GLFWGLOBAL struct {
+    int           Present;
+    int           fd;
+    int           NumAxes;
+    int           NumButtons;
+    float         *Axis;
+    unsigned char *Button;
+} _glfwJoy[ GLFW_JOYSTICK_LAST + 1 ];
+
+
+//========================================================================
+// Macros for encapsulating critical code sections (i.e. making parts
+// of GLFW thread safe)
+//========================================================================
+
+// Thread list management
+#ifdef _GLFW_HAS_PTHREAD
+ #define ENTER_THREAD_CRITICAL_SECTION \
+         pthread_mutex_lock( &_glfwThrd.CriticalSection );
+ #define LEAVE_THREAD_CRITICAL_SECTION \
+         pthread_mutex_unlock( &_glfwThrd.CriticalSection );
+#else
+ #define ENTER_THREAD_CRITICAL_SECTION
+ #define LEAVE_THREAD_CRITICAL_SECTION
+#endif
+
+
+//========================================================================
+// Prototypes for platform specific internal functions
+//========================================================================
+
+// Time
+void _glfwInitTimer( void );
+
+// Fullscreen support
+int  _glfwGetClosestVideoMode( int screen, int *width, int *height, int *rate );
+void _glfwSetVideoModeMODE( int screen, int mode, int rate );
+void _glfwSetVideoMode( int screen, int *width, int *height, int *rate );
+
+// Joystick input
+void _glfwInitJoysticks( void );
+void _glfwTerminateJoysticks( void );
+
+// Unicode support
+long _glfwKeySym2Unicode( KeySym keysym );
+
+
+#endif // _platform_h_
