Moved some files around. Made glfw compile on windows, added main function to windows/glfw
This commit is contained in:
parent
1e63fbb9f2
commit
d8b9adbf8d
518
ogl_editor/external/glfw/include/GL/glfw.h
vendored
Normal file
518
ogl_editor/external/glfw/include/GL/glfw.h
vendored
Normal file
@ -0,0 +1,518 @@
|
||||
/************************************************************************
|
||||
* GLFW - An OpenGL framework
|
||||
* API version: 2.7
|
||||
* WWW: http://www.glfw.org/
|
||||
*------------------------------------------------------------------------
|
||||
* Copyright (c) 2002-2006 Marcus Geelnard
|
||||
* Copyright (c) 2006-2010 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 __glfw_h_
|
||||
#define __glfw_h_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* Global definitions
|
||||
*************************************************************************/
|
||||
|
||||
/* We need a NULL pointer from time to time */
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif /* NULL */
|
||||
|
||||
|
||||
/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */
|
||||
|
||||
/* Please report any probles that you find with your compiler, which may
|
||||
* be solved in this section! There are several compilers that I have not
|
||||
* been able to test this file with yet.
|
||||
*
|
||||
* First: If we are we on Windows, we want a single define for it (_WIN32)
|
||||
* (Note: For Cygwin the compiler flag -mwin32 should be used, but to
|
||||
* make sure that things run smoothly for Cygwin users, we add __CYGWIN__
|
||||
* to the list of "valid Win32 identifiers", which removes the need for
|
||||
* -mwin32)
|
||||
*/
|
||||
#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__))
|
||||
#define _WIN32
|
||||
#endif /* _WIN32 */
|
||||
|
||||
/* In order for extension support to be portable, we need to define an
|
||||
* OpenGL function call method. We use the keyword APIENTRY, which is
|
||||
* defined for Win32. (Note: Windows also needs this for <GL/gl.h>)
|
||||
*/
|
||||
#ifndef APIENTRY
|
||||
#ifdef _WIN32
|
||||
#define APIENTRY __stdcall
|
||||
#else
|
||||
#define APIENTRY
|
||||
#endif
|
||||
#define GL_APIENTRY_DEFINED
|
||||
#endif /* APIENTRY */
|
||||
|
||||
|
||||
/* The following three defines are here solely to make some Windows-based
|
||||
* <GL/gl.h> files happy. Theoretically we could include <windows.h>, but
|
||||
* it has the major drawback of severely polluting our namespace.
|
||||
*/
|
||||
|
||||
/* Under Windows, we need WINGDIAPI defined */
|
||||
#if !defined(WINGDIAPI) && defined(_WIN32)
|
||||
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__POCC__)
|
||||
/* Microsoft Visual C++, Borland C++ Builder and Pelles C */
|
||||
#define WINGDIAPI __declspec(dllimport)
|
||||
#elif defined(__LCC__)
|
||||
/* LCC-Win32 */
|
||||
#define WINGDIAPI __stdcall
|
||||
#else
|
||||
/* Others (e.g. MinGW, Cygwin) */
|
||||
#define WINGDIAPI extern
|
||||
#endif
|
||||
#define GL_WINGDIAPI_DEFINED
|
||||
#endif /* WINGDIAPI */
|
||||
|
||||
/* Some <GL/glu.h> files also need CALLBACK defined */
|
||||
#if !defined(CALLBACK) && defined(_WIN32)
|
||||
#if defined(_MSC_VER)
|
||||
/* Microsoft Visual C++ */
|
||||
#if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
|
||||
#define CALLBACK __stdcall
|
||||
#else
|
||||
#define CALLBACK
|
||||
#endif
|
||||
#else
|
||||
/* Other Windows compilers */
|
||||
#define CALLBACK __stdcall
|
||||
#endif
|
||||
#define GLU_CALLBACK_DEFINED
|
||||
#endif /* CALLBACK */
|
||||
|
||||
/* Microsoft Visual C++, Borland C++ and Pelles C <GL*glu.h> needs wchar_t */
|
||||
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__BORLANDC__) || defined(__POCC__)) && !defined(_WCHAR_T_DEFINED)
|
||||
typedef unsigned short wchar_t;
|
||||
#define _WCHAR_T_DEFINED
|
||||
#endif /* _WCHAR_T_DEFINED */
|
||||
|
||||
|
||||
/* ---------------- GLFW related system specific defines ----------------- */
|
||||
|
||||
#if defined(_WIN32) && defined(GLFW_BUILD_DLL)
|
||||
|
||||
/* We are building a Win32 DLL */
|
||||
#define GLFWAPI __declspec(dllexport)
|
||||
#define GLFWAPIENTRY __stdcall
|
||||
#define GLFWCALL __stdcall
|
||||
|
||||
#elif defined(_WIN32) && defined(GLFW_DLL)
|
||||
|
||||
/* We are calling a Win32 DLL */
|
||||
#if defined(__LCC__)
|
||||
#define GLFWAPI extern
|
||||
#else
|
||||
#define GLFWAPI __declspec(dllimport)
|
||||
#endif
|
||||
#define GLFWAPIENTRY __stdcall
|
||||
#define GLFWCALL __stdcall
|
||||
|
||||
#else
|
||||
|
||||
/* We are either building/calling a static lib or we are non-win32 */
|
||||
#define GLFWAPIENTRY
|
||||
#define GLFWAPI
|
||||
#define GLFWCALL
|
||||
|
||||
#endif
|
||||
|
||||
/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
|
||||
|
||||
/* Include standard OpenGL headers: GLFW uses GL_FALSE/GL_TRUE, and it is
|
||||
* convenient for the user to only have to include <GL/glfw.h>. This also
|
||||
* solves the problem with Windows <GL/gl.h> and <GL/glu.h> needing some
|
||||
* special defines which normally requires the user to include <windows.h>
|
||||
* (which is not a nice solution for portable programs).
|
||||
*/
|
||||
#if defined(__APPLE_CC__)
|
||||
#if defined(GLFW_INCLUDE_GL3)
|
||||
#include <OpenGL/gl3.h>
|
||||
#else
|
||||
#define GL_GLEXT_LEGACY
|
||||
#include <OpenGL/gl.h>
|
||||
#endif
|
||||
#ifndef GLFW_NO_GLU
|
||||
#include <OpenGL/glu.h>
|
||||
#endif
|
||||
#else
|
||||
#if defined(GLFW_INCLUDE_GL3)
|
||||
#include <GL3/gl3.h>
|
||||
#else
|
||||
#include <GL/gl.h>
|
||||
#endif
|
||||
#ifndef GLFW_NO_GLU
|
||||
#include <GL/glu.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* GLFW version
|
||||
*************************************************************************/
|
||||
|
||||
#define GLFW_VERSION_MAJOR 2
|
||||
#define GLFW_VERSION_MINOR 7
|
||||
#define GLFW_VERSION_REVISION 7
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* Input handling definitions
|
||||
*************************************************************************/
|
||||
|
||||
/* Key and button state/action definitions */
|
||||
#define GLFW_RELEASE 0
|
||||
#define GLFW_PRESS 1
|
||||
|
||||
/* Keyboard key definitions: 8-bit ISO-8859-1 (Latin 1) encoding is used
|
||||
* for printable keys (such as A-Z, 0-9 etc), and values above 256
|
||||
* represent special (non-printable) keys (e.g. F1, Page Up etc).
|
||||
*/
|
||||
#define GLFW_KEY_UNKNOWN -1
|
||||
#define GLFW_KEY_SPACE 32
|
||||
#define GLFW_KEY_SPECIAL 256
|
||||
#define GLFW_KEY_ESC (GLFW_KEY_SPECIAL+1)
|
||||
#define GLFW_KEY_F1 (GLFW_KEY_SPECIAL+2)
|
||||
#define GLFW_KEY_F2 (GLFW_KEY_SPECIAL+3)
|
||||
#define GLFW_KEY_F3 (GLFW_KEY_SPECIAL+4)
|
||||
#define GLFW_KEY_F4 (GLFW_KEY_SPECIAL+5)
|
||||
#define GLFW_KEY_F5 (GLFW_KEY_SPECIAL+6)
|
||||
#define GLFW_KEY_F6 (GLFW_KEY_SPECIAL+7)
|
||||
#define GLFW_KEY_F7 (GLFW_KEY_SPECIAL+8)
|
||||
#define GLFW_KEY_F8 (GLFW_KEY_SPECIAL+9)
|
||||
#define GLFW_KEY_F9 (GLFW_KEY_SPECIAL+10)
|
||||
#define GLFW_KEY_F10 (GLFW_KEY_SPECIAL+11)
|
||||
#define GLFW_KEY_F11 (GLFW_KEY_SPECIAL+12)
|
||||
#define GLFW_KEY_F12 (GLFW_KEY_SPECIAL+13)
|
||||
#define GLFW_KEY_F13 (GLFW_KEY_SPECIAL+14)
|
||||
#define GLFW_KEY_F14 (GLFW_KEY_SPECIAL+15)
|
||||
#define GLFW_KEY_F15 (GLFW_KEY_SPECIAL+16)
|
||||
#define GLFW_KEY_F16 (GLFW_KEY_SPECIAL+17)
|
||||
#define GLFW_KEY_F17 (GLFW_KEY_SPECIAL+18)
|
||||
#define GLFW_KEY_F18 (GLFW_KEY_SPECIAL+19)
|
||||
#define GLFW_KEY_F19 (GLFW_KEY_SPECIAL+20)
|
||||
#define GLFW_KEY_F20 (GLFW_KEY_SPECIAL+21)
|
||||
#define GLFW_KEY_F21 (GLFW_KEY_SPECIAL+22)
|
||||
#define GLFW_KEY_F22 (GLFW_KEY_SPECIAL+23)
|
||||
#define GLFW_KEY_F23 (GLFW_KEY_SPECIAL+24)
|
||||
#define GLFW_KEY_F24 (GLFW_KEY_SPECIAL+25)
|
||||
#define GLFW_KEY_F25 (GLFW_KEY_SPECIAL+26)
|
||||
#define GLFW_KEY_UP (GLFW_KEY_SPECIAL+27)
|
||||
#define GLFW_KEY_DOWN (GLFW_KEY_SPECIAL+28)
|
||||
#define GLFW_KEY_LEFT (GLFW_KEY_SPECIAL+29)
|
||||
#define GLFW_KEY_RIGHT (GLFW_KEY_SPECIAL+30)
|
||||
#define GLFW_KEY_LSHIFT (GLFW_KEY_SPECIAL+31)
|
||||
#define GLFW_KEY_RSHIFT (GLFW_KEY_SPECIAL+32)
|
||||
#define GLFW_KEY_LCTRL (GLFW_KEY_SPECIAL+33)
|
||||
#define GLFW_KEY_RCTRL (GLFW_KEY_SPECIAL+34)
|
||||
#define GLFW_KEY_LALT (GLFW_KEY_SPECIAL+35)
|
||||
#define GLFW_KEY_RALT (GLFW_KEY_SPECIAL+36)
|
||||
#define GLFW_KEY_TAB (GLFW_KEY_SPECIAL+37)
|
||||
#define GLFW_KEY_ENTER (GLFW_KEY_SPECIAL+38)
|
||||
#define GLFW_KEY_BACKSPACE (GLFW_KEY_SPECIAL+39)
|
||||
#define GLFW_KEY_INSERT (GLFW_KEY_SPECIAL+40)
|
||||
#define GLFW_KEY_DEL (GLFW_KEY_SPECIAL+41)
|
||||
#define GLFW_KEY_PAGEUP (GLFW_KEY_SPECIAL+42)
|
||||
#define GLFW_KEY_PAGEDOWN (GLFW_KEY_SPECIAL+43)
|
||||
#define GLFW_KEY_HOME (GLFW_KEY_SPECIAL+44)
|
||||
#define GLFW_KEY_END (GLFW_KEY_SPECIAL+45)
|
||||
#define GLFW_KEY_KP_0 (GLFW_KEY_SPECIAL+46)
|
||||
#define GLFW_KEY_KP_1 (GLFW_KEY_SPECIAL+47)
|
||||
#define GLFW_KEY_KP_2 (GLFW_KEY_SPECIAL+48)
|
||||
#define GLFW_KEY_KP_3 (GLFW_KEY_SPECIAL+49)
|
||||
#define GLFW_KEY_KP_4 (GLFW_KEY_SPECIAL+50)
|
||||
#define GLFW_KEY_KP_5 (GLFW_KEY_SPECIAL+51)
|
||||
#define GLFW_KEY_KP_6 (GLFW_KEY_SPECIAL+52)
|
||||
#define GLFW_KEY_KP_7 (GLFW_KEY_SPECIAL+53)
|
||||
#define GLFW_KEY_KP_8 (GLFW_KEY_SPECIAL+54)
|
||||
#define GLFW_KEY_KP_9 (GLFW_KEY_SPECIAL+55)
|
||||
#define GLFW_KEY_KP_DIVIDE (GLFW_KEY_SPECIAL+56)
|
||||
#define GLFW_KEY_KP_MULTIPLY (GLFW_KEY_SPECIAL+57)
|
||||
#define GLFW_KEY_KP_SUBTRACT (GLFW_KEY_SPECIAL+58)
|
||||
#define GLFW_KEY_KP_ADD (GLFW_KEY_SPECIAL+59)
|
||||
#define GLFW_KEY_KP_DECIMAL (GLFW_KEY_SPECIAL+60)
|
||||
#define GLFW_KEY_KP_EQUAL (GLFW_KEY_SPECIAL+61)
|
||||
#define GLFW_KEY_KP_ENTER (GLFW_KEY_SPECIAL+62)
|
||||
#define GLFW_KEY_KP_NUM_LOCK (GLFW_KEY_SPECIAL+63)
|
||||
#define GLFW_KEY_CAPS_LOCK (GLFW_KEY_SPECIAL+64)
|
||||
#define GLFW_KEY_SCROLL_LOCK (GLFW_KEY_SPECIAL+65)
|
||||
#define GLFW_KEY_PAUSE (GLFW_KEY_SPECIAL+66)
|
||||
#define GLFW_KEY_LSUPER (GLFW_KEY_SPECIAL+67)
|
||||
#define GLFW_KEY_RSUPER (GLFW_KEY_SPECIAL+68)
|
||||
#define GLFW_KEY_MENU (GLFW_KEY_SPECIAL+69)
|
||||
#define GLFW_KEY_LAST GLFW_KEY_MENU
|
||||
|
||||
/* Mouse button definitions */
|
||||
#define GLFW_MOUSE_BUTTON_1 0
|
||||
#define GLFW_MOUSE_BUTTON_2 1
|
||||
#define GLFW_MOUSE_BUTTON_3 2
|
||||
#define GLFW_MOUSE_BUTTON_4 3
|
||||
#define GLFW_MOUSE_BUTTON_5 4
|
||||
#define GLFW_MOUSE_BUTTON_6 5
|
||||
#define GLFW_MOUSE_BUTTON_7 6
|
||||
#define GLFW_MOUSE_BUTTON_8 7
|
||||
#define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8
|
||||
|
||||
/* Mouse button aliases */
|
||||
#define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1
|
||||
#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2
|
||||
#define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3
|
||||
|
||||
|
||||
/* Joystick identifiers */
|
||||
#define GLFW_JOYSTICK_1 0
|
||||
#define GLFW_JOYSTICK_2 1
|
||||
#define GLFW_JOYSTICK_3 2
|
||||
#define GLFW_JOYSTICK_4 3
|
||||
#define GLFW_JOYSTICK_5 4
|
||||
#define GLFW_JOYSTICK_6 5
|
||||
#define GLFW_JOYSTICK_7 6
|
||||
#define GLFW_JOYSTICK_8 7
|
||||
#define GLFW_JOYSTICK_9 8
|
||||
#define GLFW_JOYSTICK_10 9
|
||||
#define GLFW_JOYSTICK_11 10
|
||||
#define GLFW_JOYSTICK_12 11
|
||||
#define GLFW_JOYSTICK_13 12
|
||||
#define GLFW_JOYSTICK_14 13
|
||||
#define GLFW_JOYSTICK_15 14
|
||||
#define GLFW_JOYSTICK_16 15
|
||||
#define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* Other definitions
|
||||
*************************************************************************/
|
||||
|
||||
/* glfwOpenWindow modes */
|
||||
#define GLFW_WINDOW 0x00010001
|
||||
#define GLFW_FULLSCREEN 0x00010002
|
||||
|
||||
/* glfwGetWindowParam tokens */
|
||||
#define GLFW_OPENED 0x00020001
|
||||
#define GLFW_ACTIVE 0x00020002
|
||||
#define GLFW_ICONIFIED 0x00020003
|
||||
#define GLFW_ACCELERATED 0x00020004
|
||||
#define GLFW_RED_BITS 0x00020005
|
||||
#define GLFW_GREEN_BITS 0x00020006
|
||||
#define GLFW_BLUE_BITS 0x00020007
|
||||
#define GLFW_ALPHA_BITS 0x00020008
|
||||
#define GLFW_DEPTH_BITS 0x00020009
|
||||
#define GLFW_STENCIL_BITS 0x0002000A
|
||||
|
||||
/* The following constants are used for both glfwGetWindowParam
|
||||
* and glfwOpenWindowHint
|
||||
*/
|
||||
#define GLFW_REFRESH_RATE 0x0002000B
|
||||
#define GLFW_ACCUM_RED_BITS 0x0002000C
|
||||
#define GLFW_ACCUM_GREEN_BITS 0x0002000D
|
||||
#define GLFW_ACCUM_BLUE_BITS 0x0002000E
|
||||
#define GLFW_ACCUM_ALPHA_BITS 0x0002000F
|
||||
#define GLFW_AUX_BUFFERS 0x00020010
|
||||
#define GLFW_STEREO 0x00020011
|
||||
#define GLFW_WINDOW_NO_RESIZE 0x00020012
|
||||
#define GLFW_FSAA_SAMPLES 0x00020013
|
||||
#define GLFW_OPENGL_VERSION_MAJOR 0x00020014
|
||||
#define GLFW_OPENGL_VERSION_MINOR 0x00020015
|
||||
#define GLFW_OPENGL_FORWARD_COMPAT 0x00020016
|
||||
#define GLFW_OPENGL_DEBUG_CONTEXT 0x00020017
|
||||
#define GLFW_OPENGL_PROFILE 0x00020018
|
||||
|
||||
/* GLFW_OPENGL_PROFILE tokens */
|
||||
#define GLFW_OPENGL_CORE_PROFILE 0x00050001
|
||||
#define GLFW_OPENGL_COMPAT_PROFILE 0x00050002
|
||||
|
||||
/* glfwEnable/glfwDisable tokens */
|
||||
#define GLFW_MOUSE_CURSOR 0x00030001
|
||||
#define GLFW_STICKY_KEYS 0x00030002
|
||||
#define GLFW_STICKY_MOUSE_BUTTONS 0x00030003
|
||||
#define GLFW_SYSTEM_KEYS 0x00030004
|
||||
#define GLFW_KEY_REPEAT 0x00030005
|
||||
#define GLFW_AUTO_POLL_EVENTS 0x00030006
|
||||
|
||||
/* glfwWaitThread wait modes */
|
||||
#define GLFW_WAIT 0x00040001
|
||||
#define GLFW_NOWAIT 0x00040002
|
||||
|
||||
/* glfwGetJoystickParam tokens */
|
||||
#define GLFW_PRESENT 0x00050001
|
||||
#define GLFW_AXES 0x00050002
|
||||
#define GLFW_BUTTONS 0x00050003
|
||||
|
||||
/* glfwReadImage/glfwLoadTexture2D flags */
|
||||
#define GLFW_NO_RESCALE_BIT 0x00000001 /* Only for glfwReadImage */
|
||||
#define GLFW_ORIGIN_UL_BIT 0x00000002
|
||||
#define GLFW_BUILD_MIPMAPS_BIT 0x00000004 /* Only for glfwLoadTexture2D */
|
||||
#define GLFW_ALPHA_MAP_BIT 0x00000008
|
||||
|
||||
/* Time spans longer than this (seconds) are considered to be infinity */
|
||||
#define GLFW_INFINITY 100000.0
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* Typedefs
|
||||
*************************************************************************/
|
||||
|
||||
/* The video mode structure used by glfwGetVideoModes() */
|
||||
typedef struct {
|
||||
int Width, Height;
|
||||
int RedBits, BlueBits, GreenBits;
|
||||
} GLFWvidmode;
|
||||
|
||||
/* Image/texture information */
|
||||
typedef struct {
|
||||
int Width, Height;
|
||||
int Format;
|
||||
int BytesPerPixel;
|
||||
unsigned char *Data;
|
||||
} GLFWimage;
|
||||
|
||||
/* Thread ID */
|
||||
typedef int GLFWthread;
|
||||
|
||||
/* Mutex object */
|
||||
typedef void * GLFWmutex;
|
||||
|
||||
/* Condition variable object */
|
||||
typedef void * GLFWcond;
|
||||
|
||||
/* Function pointer types */
|
||||
typedef void (GLFWCALL * GLFWwindowsizefun)(int,int);
|
||||
typedef int (GLFWCALL * GLFWwindowclosefun)(void);
|
||||
typedef void (GLFWCALL * GLFWwindowrefreshfun)(void);
|
||||
typedef void (GLFWCALL * GLFWmousebuttonfun)(int,int);
|
||||
typedef void (GLFWCALL * GLFWmouseposfun)(int,int);
|
||||
typedef void (GLFWCALL * GLFWmousewheelfun)(int);
|
||||
typedef void (GLFWCALL * GLFWkeyfun)(int,int);
|
||||
typedef void (GLFWCALL * GLFWcharfun)(int,int);
|
||||
typedef void (GLFWCALL * GLFWthreadfun)(void *);
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* Prototypes
|
||||
*************************************************************************/
|
||||
|
||||
/* GLFW initialization, termination and version querying */
|
||||
GLFWAPI int GLFWAPIENTRY glfwInit( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwTerminate( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetVersion( int *major, int *minor, int *rev );
|
||||
|
||||
/* Window handling */
|
||||
GLFWAPI int GLFWAPIENTRY glfwOpenWindow( int width, int height, int redbits, int greenbits, int bluebits, int alphabits, int depthbits, int stencilbits, int mode );
|
||||
GLFWAPI void GLFWAPIENTRY glfwOpenWindowHint( int target, int hint );
|
||||
GLFWAPI void GLFWAPIENTRY glfwCloseWindow( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetWindowTitle( const char *title );
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetWindowSize( int *width, int *height );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetWindowSize( int width, int height );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetWindowPos( int x, int y );
|
||||
GLFWAPI void GLFWAPIENTRY glfwIconifyWindow( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwRestoreWindow( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSwapBuffers( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSwapInterval( int interval );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetWindowParam( int param );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetWindowSizeCallback( GLFWwindowsizefun cbfun );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetWindowCloseCallback( GLFWwindowclosefun cbfun );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetWindowRefreshCallback( GLFWwindowrefreshfun cbfun );
|
||||
|
||||
/* Video mode functions */
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetVideoModes( GLFWvidmode *list, int maxcount );
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetDesktopMode( GLFWvidmode *mode );
|
||||
|
||||
/* Input handling */
|
||||
GLFWAPI void GLFWAPIENTRY glfwPollEvents( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwWaitEvents( void );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetKey( int key );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetMouseButton( int button );
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetMousePos( int *xpos, int *ypos );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMousePos( int xpos, int ypos );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetMouseWheel( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMouseWheel( int pos );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetKeyCallback( GLFWkeyfun cbfun );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetCharCallback( GLFWcharfun cbfun );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMouseButtonCallback( GLFWmousebuttonfun cbfun );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMousePosCallback( GLFWmouseposfun cbfun );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMouseWheelCallback( GLFWmousewheelfun cbfun );
|
||||
|
||||
/* Joystick input */
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetJoystickParam( int joy, int param );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetJoystickPos( int joy, float *pos, int numaxes );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons );
|
||||
|
||||
/* Time */
|
||||
GLFWAPI double GLFWAPIENTRY glfwGetTime( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetTime( double time );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSleep( double time );
|
||||
|
||||
/* Extension support */
|
||||
GLFWAPI int GLFWAPIENTRY glfwExtensionSupported( const char *extension );
|
||||
GLFWAPI void* GLFWAPIENTRY glfwGetProcAddress( const char *procname );
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetGLVersion( int *major, int *minor, int *rev );
|
||||
|
||||
/* Threading support */
|
||||
GLFWAPI GLFWthread GLFWAPIENTRY glfwCreateThread( GLFWthreadfun fun, void *arg );
|
||||
GLFWAPI void GLFWAPIENTRY glfwDestroyThread( GLFWthread ID );
|
||||
GLFWAPI int GLFWAPIENTRY glfwWaitThread( GLFWthread ID, int waitmode );
|
||||
GLFWAPI GLFWthread GLFWAPIENTRY glfwGetThreadID( void );
|
||||
GLFWAPI GLFWmutex GLFWAPIENTRY glfwCreateMutex( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwDestroyMutex( GLFWmutex mutex );
|
||||
GLFWAPI void GLFWAPIENTRY glfwLockMutex( GLFWmutex mutex );
|
||||
GLFWAPI void GLFWAPIENTRY glfwUnlockMutex( GLFWmutex mutex );
|
||||
GLFWAPI GLFWcond GLFWAPIENTRY glfwCreateCond( void );
|
||||
GLFWAPI void GLFWAPIENTRY glfwDestroyCond( GLFWcond cond );
|
||||
GLFWAPI void GLFWAPIENTRY glfwWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout );
|
||||
GLFWAPI void GLFWAPIENTRY glfwSignalCond( GLFWcond cond );
|
||||
GLFWAPI void GLFWAPIENTRY glfwBroadcastCond( GLFWcond cond );
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetNumberOfProcessors( void );
|
||||
|
||||
/* Enable/disable functions */
|
||||
GLFWAPI void GLFWAPIENTRY glfwEnable( int token );
|
||||
GLFWAPI void GLFWAPIENTRY glfwDisable( int token );
|
||||
|
||||
/* Image/texture I/O support */
|
||||
GLFWAPI int GLFWAPIENTRY glfwReadImage( const char *name, GLFWimage *img, int flags );
|
||||
GLFWAPI int GLFWAPIENTRY glfwReadMemoryImage( const void *data, long size, GLFWimage *img, int flags );
|
||||
GLFWAPI void GLFWAPIENTRY glfwFreeImage( GLFWimage *img );
|
||||
GLFWAPI int GLFWAPIENTRY glfwLoadTexture2D( const char *name, int flags );
|
||||
GLFWAPI int GLFWAPIENTRY glfwLoadMemoryTexture2D( const void *data, long size, int flags );
|
||||
GLFWAPI int GLFWAPIENTRY glfwLoadTextureImage2D( GLFWimage *img, int flags );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __glfw_h_ */
|
||||
|
||||
179
ogl_editor/external/glfw/lib/cocoa/Makefile.cocoa
vendored
Normal file
179
ogl_editor/external/glfw/lib/cocoa/Makefile.cocoa
vendored
Normal file
@ -0,0 +1,179 @@
|
||||
##########################################################################
|
||||
# Makefile for GLFW on Cocoa on Mac OS X using Apple GCC
|
||||
#-------------------------------------------------------------------------
|
||||
# To compile GLFW using this makefile, run:
|
||||
# make -f Makefile.cocoa
|
||||
##########################################################################
|
||||
|
||||
##########################################################################
|
||||
# Installation prefix (default to /usr/local)
|
||||
##########################################################################
|
||||
PREFIX ?= /usr/local
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Default: Build GLFW static and shared library
|
||||
##########################################################################
|
||||
all: libglfw.a libglfw.dylib
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Compiler settings
|
||||
##########################################################################
|
||||
CC ?= cc
|
||||
CFLAGS ?= -O2 -g
|
||||
CFLAGS += -c -I. -I.. -Wall -fno-common
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
AR = ar
|
||||
SED = sed
|
||||
INSTALL = install
|
||||
ARFLAGS = -rcs
|
||||
RANLIB = ranlib
|
||||
DYLIBFLAGS = -framework Cocoa -framework OpenGL -framework IOKit \
|
||||
-dynamiclib -Wl,-single_module -compatibility_version 1 \
|
||||
-current_version 1 -install_name @executable_path/libglfw.dylib
|
||||
HEADERS = ../../include/GL/glfw.h ../internal.h platform.h
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Install GLFW header and static library
|
||||
##########################################################################
|
||||
install: libglfw.a libglfw.pc
|
||||
$(INSTALL) -d $(PREFIX)/lib
|
||||
$(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a
|
||||
$(RANLIB) $(PREFIX)/lib/libglfw.a
|
||||
$(INSTALL) -d $(PREFIX)/include/GL
|
||||
$(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h
|
||||
$(INSTALL) -d $(PREFIX)/lib/pkgconfig
|
||||
$(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Install GLFW header and static and dynamic libraries
|
||||
##########################################################################
|
||||
dist-install: libglfw.dylib install
|
||||
$(INSTALL) -c -m 644 libglfw.dylib $(PREFIX)/lib/libglfw.dylib
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for the GLFW library
|
||||
##########################################################################
|
||||
OBJS = \
|
||||
enable.o \
|
||||
fullscreen.o \
|
||||
glext.o \
|
||||
image.o \
|
||||
init.o \
|
||||
input.o \
|
||||
joystick.o \
|
||||
stream.o \
|
||||
tga.o \
|
||||
thread.o \
|
||||
time.o \
|
||||
window.o \
|
||||
cocoa_enable.o \
|
||||
cocoa_fullscreen.o \
|
||||
cocoa_glext.o \
|
||||
cocoa_init.o \
|
||||
cocoa_joystick.o \
|
||||
cocoa_thread.o \
|
||||
cocoa_time.o \
|
||||
cocoa_window.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building libglfw.pc
|
||||
##########################################################################
|
||||
libglfw.pc: libglfw.pc.in
|
||||
$(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
libglfw.a: $(OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJS)
|
||||
$(RANLIB) $@
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building shared library
|
||||
##########################################################################
|
||||
libglfw.dylib: $(OBJS)
|
||||
$(CC) -o $@ $(DYLIBFLAGS) $(OBJS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for cleaning up generated files
|
||||
##########################################################################
|
||||
clean:
|
||||
rm -f $(OBJS) libglfw.a libglfw.dylib libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building library object files
|
||||
##########################################################################
|
||||
enable.o: ../enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../enable.c
|
||||
|
||||
fullscreen.o: ../fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../fullscreen.c
|
||||
|
||||
glext.o: ../glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../glext.c
|
||||
|
||||
image.o: ../image.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../image.c
|
||||
|
||||
init.o: ../init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../init.c
|
||||
|
||||
input.o: ../input.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../input.c
|
||||
|
||||
joystick.o: ../joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../joystick.c
|
||||
|
||||
stream.o: ../stream.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../stream.c
|
||||
|
||||
tga.o: ../tga.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../tga.c
|
||||
|
||||
thread.o: ../thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../thread.c
|
||||
|
||||
time.o: ../time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../time.c
|
||||
|
||||
window.o: ../window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../window.c
|
||||
|
||||
cocoa_enable.o: cocoa_enable.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_enable.m
|
||||
|
||||
cocoa_fullscreen.o: cocoa_fullscreen.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_fullscreen.m
|
||||
|
||||
cocoa_glext.o: cocoa_glext.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_glext.m
|
||||
|
||||
cocoa_init.o: cocoa_init.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_init.m
|
||||
|
||||
cocoa_joystick.o: cocoa_joystick.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_joystick.m
|
||||
|
||||
cocoa_thread.o: cocoa_thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_thread.c
|
||||
|
||||
cocoa_time.o: cocoa_time.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_time.m
|
||||
|
||||
cocoa_window.o: cocoa_window.m $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ cocoa_window.m
|
||||
|
||||
51
ogl_editor/external/glfw/lib/cocoa/cocoa_enable.m
vendored
Normal file
51
ogl_editor/external/glfw/lib/cocoa/cocoa_enable.m
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Enable and disable system keys
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformEnableSystemKeys( void )
|
||||
{
|
||||
// This is checked in macosx_window.m; we take no action here
|
||||
}
|
||||
|
||||
void _glfwPlatformDisableSystemKeys( void )
|
||||
{
|
||||
// This is checked in macosx_window.m; we take no action here
|
||||
// I don't think it's really possible to disable stuff like Exposé
|
||||
// except in full-screen mode.
|
||||
}
|
||||
|
||||
104
ogl_editor/external/glfw/lib/cocoa/cocoa_fullscreen.m
vendored
Normal file
104
ogl_editor/external/glfw/lib/cocoa/cocoa_fullscreen.m
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
//========================================================================
|
||||
// Check whether the display mode should be included in enumeration
|
||||
//========================================================================
|
||||
|
||||
static BOOL modeIsGood( NSDictionary *mode )
|
||||
{
|
||||
// This is a bit controversial, if you've got something other than an
|
||||
// LCD computer monitor as an output device you might not want these
|
||||
// checks. You might also want to reject modes which are interlaced,
|
||||
// or TV out. There is no one-size-fits-all policy that can work here.
|
||||
// This seems like a decent compromise, but certain applications may
|
||||
// wish to patch this...
|
||||
return [[mode objectForKey:(id)kCGDisplayBitsPerPixel] intValue] >= 15 &&
|
||||
[mode objectForKey:(id)kCGDisplayModeIsSafeForHardware] != nil &&
|
||||
[mode objectForKey:(id)kCGDisplayModeIsStretched] == nil;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Convert Core Graphics display mode to GLFW video mode
|
||||
//========================================================================
|
||||
|
||||
static GLFWvidmode vidmodeFromCGDisplayMode( NSDictionary *mode )
|
||||
{
|
||||
unsigned int width = [[mode objectForKey:(id)kCGDisplayWidth] unsignedIntValue];
|
||||
unsigned int height = [[mode objectForKey:(id)kCGDisplayHeight] unsignedIntValue];
|
||||
unsigned int bps = [[mode objectForKey:(id)kCGDisplayBitsPerSample] unsignedIntValue];
|
||||
|
||||
GLFWvidmode result;
|
||||
result.Width = width;
|
||||
result.Height = height;
|
||||
result.RedBits = bps;
|
||||
result.GreenBits = bps;
|
||||
result.BlueBits = bps;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Get a list of available video modes
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount )
|
||||
{
|
||||
NSArray *modes = (NSArray *)CGDisplayAvailableModes( CGMainDisplayID() );
|
||||
|
||||
unsigned int i, j = 0, n = [modes count];
|
||||
for( i = 0; i < n && j < (unsigned)maxcount; i++ )
|
||||
{
|
||||
NSDictionary *mode = [modes objectAtIndex:i];
|
||||
if( modeIsGood( mode ) )
|
||||
{
|
||||
list[j++] = vidmodeFromCGDisplayMode( mode );
|
||||
}
|
||||
}
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the desktop video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformGetDesktopMode( GLFWvidmode *mode )
|
||||
{
|
||||
*mode = vidmodeFromCGDisplayMode( CGDisplayCurrentMode( CGMainDisplayID() ) );
|
||||
}
|
||||
|
||||
64
ogl_editor/external/glfw/lib/cocoa/cocoa_glext.m
vendored
Normal file
64
ogl_editor/external/glfw/lib/cocoa/cocoa_glext.m
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Check if an OpenGL extension is available at runtime
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformExtensionSupported( const char *extension )
|
||||
{
|
||||
// There are no AGL, CGL or NSGL extensions.
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the function pointer to an OpenGL function
|
||||
//========================================================================
|
||||
|
||||
void * _glfwPlatformGetProcAddress( const char *procname )
|
||||
{
|
||||
CFStringRef symbolName = CFStringCreateWithCString( kCFAllocatorDefault,
|
||||
procname,
|
||||
kCFStringEncodingASCII );
|
||||
|
||||
void *symbol = CFBundleGetFunctionPointerForName( _glfwLibrary.OpenGLFramework,
|
||||
symbolName );
|
||||
|
||||
CFRelease( symbolName );
|
||||
|
||||
return symbol;
|
||||
}
|
||||
|
||||
195
ogl_editor/external/glfw/lib/cocoa/cocoa_init.m
vendored
Normal file
195
ogl_editor/external/glfw/lib/cocoa/cocoa_init.m
vendored
Normal file
@ -0,0 +1,195 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
@interface GLFWThread : NSThread
|
||||
@end
|
||||
|
||||
@implementation GLFWThread
|
||||
|
||||
- (void)main
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
//========================================================================
|
||||
// Change to our application bundle's resources directory, if present
|
||||
//========================================================================
|
||||
|
||||
static void changeToResourcesDirectory( void )
|
||||
{
|
||||
char resourcesPath[MAXPATHLEN];
|
||||
|
||||
CFBundleRef bundle = CFBundleGetMainBundle();
|
||||
if( !bundle )
|
||||
return;
|
||||
|
||||
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL( bundle );
|
||||
|
||||
CFStringRef last = CFURLCopyLastPathComponent( resourcesURL );
|
||||
if( CFStringCompare( CFSTR( "Resources" ), last, 0 ) != kCFCompareEqualTo )
|
||||
{
|
||||
CFRelease( last );
|
||||
CFRelease( resourcesURL );
|
||||
return;
|
||||
}
|
||||
|
||||
CFRelease( last );
|
||||
|
||||
if( !CFURLGetFileSystemRepresentation( resourcesURL,
|
||||
true,
|
||||
(UInt8*) resourcesPath,
|
||||
MAXPATHLEN) )
|
||||
{
|
||||
CFRelease( resourcesURL );
|
||||
return;
|
||||
}
|
||||
|
||||
CFRelease( resourcesURL );
|
||||
|
||||
chdir( resourcesPath );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Terminate GLFW when exiting application
|
||||
//========================================================================
|
||||
|
||||
static void glfw_atexit( void )
|
||||
{
|
||||
glfwTerminate();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Initialize GLFW thread package
|
||||
//========================================================================
|
||||
|
||||
static void initThreads( void )
|
||||
{
|
||||
// Initialize critical section handle
|
||||
(void) pthread_mutex_init( &_glfwThrd.CriticalSection, NULL );
|
||||
|
||||
// The first thread (the main thread) has ID 0
|
||||
_glfwThrd.NextID = 0;
|
||||
|
||||
// Fill out information about the main thread (this thread)
|
||||
_glfwThrd.First.ID = _glfwThrd.NextID ++;
|
||||
_glfwThrd.First.Function = NULL;
|
||||
_glfwThrd.First.PosixID = pthread_self();
|
||||
_glfwThrd.First.Previous = NULL;
|
||||
_glfwThrd.First.Next = NULL;
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialize the GLFW library
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformInit( void )
|
||||
{
|
||||
_glfwLibrary.autoreleasePool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
_glfwLibrary.OpenGLFramework =
|
||||
CFBundleGetBundleWithIdentifier( CFSTR( "com.apple.opengl" ) );
|
||||
if( _glfwLibrary.OpenGLFramework == NULL )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
GLFWThread* thread = [[GLFWThread alloc] init];
|
||||
[thread start];
|
||||
[thread release];
|
||||
|
||||
changeToResourcesDirectory();
|
||||
|
||||
_glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode );
|
||||
|
||||
// Install atexit routine
|
||||
atexit( glfw_atexit );
|
||||
|
||||
initThreads();
|
||||
|
||||
_glfwInitTimer();
|
||||
|
||||
_glfwInitJoysticks();
|
||||
|
||||
_glfwLibrary.eventSource = CGEventSourceCreate( kCGEventSourceStateHIDSystemState );
|
||||
if( !_glfwLibrary.eventSource )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
CGEventSourceSetLocalEventsSuppressionInterval( _glfwLibrary.eventSource,
|
||||
0.0 );
|
||||
|
||||
_glfwPlatformSetTime( 0.0 );
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Close window, if open, and shut down GLFW
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformTerminate( void )
|
||||
{
|
||||
if( pthread_self() != _glfwThrd.First.PosixID )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
glfwCloseWindow();
|
||||
|
||||
// TODO: Kill all non-main threads?
|
||||
// TODO: Probably other cleanup
|
||||
|
||||
if( _glfwLibrary.eventSource )
|
||||
{
|
||||
CFRelease( _glfwLibrary.eventSource );
|
||||
_glfwLibrary.eventSource = NULL;
|
||||
}
|
||||
|
||||
_glfwTerminateJoysticks();
|
||||
|
||||
[_glfwLibrary.autoreleasePool release];
|
||||
_glfwLibrary.autoreleasePool = nil;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
648
ogl_editor/external/glfw/lib/cocoa/cocoa_joystick.m
vendored
Normal file
648
ogl_editor/external/glfw/lib/cocoa/cocoa_joystick.m
vendored
Normal file
@ -0,0 +1,648 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <mach/mach.h>
|
||||
#include <mach/mach_error.h>
|
||||
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <IOKit/IOKitLib.h>
|
||||
#include <IOKit/IOCFPlugIn.h>
|
||||
#include <IOKit/hid/IOHIDLib.h>
|
||||
#include <IOKit/hid/IOHIDKeys.h>
|
||||
#include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h>
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Joystick state
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int present;
|
||||
char product[256];
|
||||
|
||||
IOHIDDeviceInterface** interface;
|
||||
|
||||
int numAxes;
|
||||
int numButtons;
|
||||
int numHats;
|
||||
|
||||
CFMutableArrayRef axes;
|
||||
CFMutableArrayRef buttons;
|
||||
CFMutableArrayRef hats;
|
||||
|
||||
} _glfwJoystick;
|
||||
|
||||
static _glfwJoystick _glfwJoysticks[GLFW_JOYSTICK_LAST + 1];
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IOHIDElementCookie cookie;
|
||||
|
||||
long value;
|
||||
|
||||
long min;
|
||||
long max;
|
||||
|
||||
long minReport;
|
||||
long maxReport;
|
||||
|
||||
} _glfwJoystickElement;
|
||||
|
||||
|
||||
void GetElementsCFArrayHandler( const void* value, void* parameter );
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Adds an element to the specified joystick
|
||||
//========================================================================
|
||||
|
||||
static void addJoystickElement( _glfwJoystick* joystick, CFTypeRef refElement )
|
||||
{
|
||||
long elementType, usagePage, usage;
|
||||
CFTypeRef refElementType, refUsagePage, refUsage;
|
||||
|
||||
refElementType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementTypeKey ) );
|
||||
refUsagePage = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementUsagePageKey ) );
|
||||
refUsage = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementUsageKey ) );
|
||||
|
||||
CFMutableArrayRef elementsArray = NULL;
|
||||
|
||||
CFNumberGetValue( refElementType, kCFNumberLongType, &elementType );
|
||||
CFNumberGetValue( refUsagePage, kCFNumberLongType, &usagePage );
|
||||
CFNumberGetValue( refUsage, kCFNumberLongType, &usage );
|
||||
|
||||
if( elementType == kIOHIDElementTypeInput_Axis ||
|
||||
elementType == kIOHIDElementTypeInput_Button ||
|
||||
elementType == kIOHIDElementTypeInput_Misc )
|
||||
{
|
||||
switch( usagePage ) /* only interested in kHIDPage_GenericDesktop and kHIDPage_Button */
|
||||
{
|
||||
case kHIDPage_GenericDesktop:
|
||||
{
|
||||
switch( usage )
|
||||
{
|
||||
case kHIDUsage_GD_X:
|
||||
case kHIDUsage_GD_Y:
|
||||
case kHIDUsage_GD_Z:
|
||||
case kHIDUsage_GD_Rx:
|
||||
case kHIDUsage_GD_Ry:
|
||||
case kHIDUsage_GD_Rz:
|
||||
case kHIDUsage_GD_Slider:
|
||||
case kHIDUsage_GD_Dial:
|
||||
case kHIDUsage_GD_Wheel:
|
||||
joystick->numAxes++;
|
||||
elementsArray = joystick->axes;
|
||||
break;
|
||||
case kHIDUsage_GD_Hatswitch:
|
||||
joystick->numHats++;
|
||||
elementsArray = joystick->hats;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case kHIDPage_Button:
|
||||
joystick->numButtons++;
|
||||
elementsArray = joystick->buttons;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if( elementsArray )
|
||||
{
|
||||
long number;
|
||||
CFTypeRef refType;
|
||||
|
||||
_glfwJoystickElement* element = (_glfwJoystickElement*) malloc( sizeof( _glfwJoystickElement ) );
|
||||
|
||||
CFArrayAppendValue( elementsArray, element );
|
||||
|
||||
refType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementCookieKey ) );
|
||||
if( refType && CFNumberGetValue( refType, kCFNumberLongType, &number ) )
|
||||
{
|
||||
element->cookie = (IOHIDElementCookie) number;
|
||||
}
|
||||
|
||||
refType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementMinKey ) );
|
||||
if( refType && CFNumberGetValue( refType, kCFNumberLongType, &number ) )
|
||||
{
|
||||
element->minReport = element->min = number;
|
||||
}
|
||||
|
||||
refType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementMaxKey ) );
|
||||
if( refType && CFNumberGetValue( refType, kCFNumberLongType, &number ) )
|
||||
{
|
||||
element->maxReport = element->max = number;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CFTypeRef refElementTop = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementKey ) );
|
||||
if( refElementTop )
|
||||
{
|
||||
CFTypeID type = CFGetTypeID( refElementTop );
|
||||
if( type == CFArrayGetTypeID() ) /* if element is an array */
|
||||
{
|
||||
CFRange range = { 0, CFArrayGetCount( refElementTop ) };
|
||||
CFArrayApplyFunction( refElementTop, range, GetElementsCFArrayHandler, joystick );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Adds an element to the specified joystick
|
||||
//========================================================================
|
||||
|
||||
void GetElementsCFArrayHandler( const void* value, void* parameter )
|
||||
{
|
||||
if( CFGetTypeID( value ) == CFDictionaryGetTypeID() )
|
||||
{
|
||||
addJoystickElement( (_glfwJoystick*) parameter, (CFTypeRef) value );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Returns the value of the specified element of the specified joystick
|
||||
//========================================================================
|
||||
|
||||
static long getElementValue( _glfwJoystick* joystick, _glfwJoystickElement* element )
|
||||
{
|
||||
IOReturn result = kIOReturnSuccess;
|
||||
IOHIDEventStruct hidEvent;
|
||||
hidEvent.value = 0;
|
||||
|
||||
if( joystick && element && joystick->interface )
|
||||
{
|
||||
result = (*(joystick->interface))->getElementValue( joystick->interface,
|
||||
element->cookie,
|
||||
&hidEvent );
|
||||
if( kIOReturnSuccess == result )
|
||||
{
|
||||
/* record min and max for auto calibration */
|
||||
if( hidEvent.value < element->minReport )
|
||||
{
|
||||
element->minReport = hidEvent.value;
|
||||
}
|
||||
if( hidEvent.value > element->maxReport )
|
||||
{
|
||||
element->maxReport = hidEvent.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* auto user scale */
|
||||
return (long) hidEvent.value;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Removes the specified joystick
|
||||
//========================================================================
|
||||
|
||||
static void removeJoystick( _glfwJoystick* joystick )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( joystick->present )
|
||||
{
|
||||
joystick->present = GL_FALSE;
|
||||
|
||||
for( i = 0; i < joystick->numAxes; i++ )
|
||||
{
|
||||
_glfwJoystickElement* axes =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->axes, i );
|
||||
free( axes );
|
||||
}
|
||||
CFArrayRemoveAllValues( joystick->axes );
|
||||
joystick->numAxes = 0;
|
||||
|
||||
for( i = 0; i < joystick->numButtons; i++ )
|
||||
{
|
||||
_glfwJoystickElement* button =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->buttons, i );
|
||||
free( button );
|
||||
}
|
||||
CFArrayRemoveAllValues( joystick->buttons );
|
||||
joystick->numButtons = 0;
|
||||
|
||||
for( i = 0; i < joystick->numHats; i++ )
|
||||
{
|
||||
_glfwJoystickElement* hat =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->hats, i );
|
||||
free( hat );
|
||||
}
|
||||
CFArrayRemoveAllValues( joystick->hats );
|
||||
joystick->hats = 0;
|
||||
|
||||
(*(joystick->interface))->close( joystick->interface );
|
||||
(*(joystick->interface))->Release( joystick->interface );
|
||||
|
||||
joystick->interface = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Callback for user-initiated joystick removal
|
||||
//========================================================================
|
||||
|
||||
static void removalCallback( void* target, IOReturn result, void* refcon, void* sender )
|
||||
{
|
||||
removeJoystick( (_glfwJoystick*) refcon );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Polls for joystick events and updates GFLW state
|
||||
//========================================================================
|
||||
|
||||
static void pollJoystickEvents( void )
|
||||
{
|
||||
int i;
|
||||
CFIndex j;
|
||||
|
||||
for( i = 0; i < GLFW_JOYSTICK_LAST + 1; i++ )
|
||||
{
|
||||
_glfwJoystick* joystick = &_glfwJoysticks[i];
|
||||
|
||||
if( joystick->present )
|
||||
{
|
||||
for( j = 0; j < joystick->numButtons; j++ )
|
||||
{
|
||||
_glfwJoystickElement* button =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->buttons, j );
|
||||
button->value = getElementValue( joystick, button );
|
||||
}
|
||||
|
||||
for( j = 0; j < joystick->numAxes; j++ )
|
||||
{
|
||||
_glfwJoystickElement* axes =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->axes, j );
|
||||
axes->value = getElementValue( joystick, axes );
|
||||
}
|
||||
|
||||
for( j = 0; j < joystick->numHats; j++ )
|
||||
{
|
||||
_glfwJoystickElement* hat =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->hats, j );
|
||||
hat->value = getElementValue( joystick, hat );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialize joystick interface
|
||||
//========================================================================
|
||||
|
||||
void _glfwInitJoysticks( void )
|
||||
{
|
||||
int deviceCounter = 0;
|
||||
IOReturn result = kIOReturnSuccess;
|
||||
mach_port_t masterPort = 0;
|
||||
io_iterator_t objectIterator = 0;
|
||||
CFMutableDictionaryRef hidMatchDictionary = NULL;
|
||||
io_object_t ioHIDDeviceObject = 0;
|
||||
|
||||
result = IOMasterPort( bootstrap_port, &masterPort );
|
||||
hidMatchDictionary = IOServiceMatching( kIOHIDDeviceKey );
|
||||
if( kIOReturnSuccess != result || !hidMatchDictionary )
|
||||
{
|
||||
if( hidMatchDictionary )
|
||||
{
|
||||
CFRelease( hidMatchDictionary );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
result = IOServiceGetMatchingServices( masterPort,
|
||||
hidMatchDictionary,
|
||||
&objectIterator );
|
||||
if( result != kIOReturnSuccess )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( !objectIterator ) /* there are no joysticks */
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
while( ( ioHIDDeviceObject = IOIteratorNext( objectIterator ) ) )
|
||||
{
|
||||
CFMutableDictionaryRef hidProperties = 0;
|
||||
kern_return_t result;
|
||||
CFTypeRef refCF = 0;
|
||||
|
||||
IOCFPlugInInterface** ppPlugInInterface = NULL;
|
||||
HRESULT plugInResult = S_OK;
|
||||
SInt32 score = 0;
|
||||
|
||||
long usagePage, usage;
|
||||
|
||||
result = IORegistryEntryCreateCFProperties( ioHIDDeviceObject,
|
||||
&hidProperties,
|
||||
kCFAllocatorDefault,
|
||||
kNilOptions );
|
||||
|
||||
if( result != kIOReturnSuccess )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check device type */
|
||||
refCF = CFDictionaryGetValue( hidProperties, CFSTR( kIOHIDPrimaryUsagePageKey ) );
|
||||
if( refCF )
|
||||
{
|
||||
CFNumberGetValue( refCF, kCFNumberLongType, &usagePage );
|
||||
if( usagePage != kHIDPage_GenericDesktop )
|
||||
{
|
||||
/* We are not interested in this device */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
refCF = CFDictionaryGetValue( hidProperties, CFSTR( kIOHIDPrimaryUsageKey ) );
|
||||
if( refCF )
|
||||
{
|
||||
CFNumberGetValue( refCF, kCFNumberLongType, &usage );
|
||||
|
||||
if( usage != kHIDUsage_GD_Joystick &&
|
||||
usage != kHIDUsage_GD_GamePad &&
|
||||
usage != kHIDUsage_GD_MultiAxisController )
|
||||
{
|
||||
/* We are not interested in this device */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
_glfwJoystick* joystick = &_glfwJoysticks[deviceCounter];
|
||||
|
||||
joystick->present = GL_TRUE;
|
||||
|
||||
result = IOCreatePlugInInterfaceForService( ioHIDDeviceObject,
|
||||
kIOHIDDeviceUserClientTypeID,
|
||||
kIOCFPlugInInterfaceID,
|
||||
&ppPlugInInterface,
|
||||
&score );
|
||||
|
||||
if( kIOReturnSuccess != result )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
plugInResult = (*ppPlugInInterface)->QueryInterface( ppPlugInInterface,
|
||||
CFUUIDGetUUIDBytes( kIOHIDDeviceInterfaceID ),
|
||||
(void *) &(joystick->interface) );
|
||||
|
||||
if( plugInResult != S_OK )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
(*ppPlugInInterface)->Release( ppPlugInInterface );
|
||||
|
||||
(*(joystick->interface))->open( joystick->interface, 0 );
|
||||
(*(joystick->interface))->setRemovalCallback( joystick->interface,
|
||||
removalCallback,
|
||||
joystick,
|
||||
joystick );
|
||||
|
||||
/* Get product string */
|
||||
refCF = CFDictionaryGetValue( hidProperties, CFSTR( kIOHIDProductKey ) );
|
||||
if( refCF )
|
||||
{
|
||||
CFStringGetCString( refCF,
|
||||
(char*) &(joystick->product),
|
||||
256,
|
||||
CFStringGetSystemEncoding() );
|
||||
}
|
||||
|
||||
joystick->numAxes = 0;
|
||||
joystick->numButtons = 0;
|
||||
joystick->numHats = 0;
|
||||
joystick->axes = CFArrayCreateMutable( NULL, 0, NULL );
|
||||
joystick->buttons = CFArrayCreateMutable( NULL, 0, NULL );
|
||||
joystick->hats = CFArrayCreateMutable( NULL, 0, NULL );
|
||||
|
||||
CFTypeRef refTopElement = CFDictionaryGetValue( hidProperties,
|
||||
CFSTR( kIOHIDElementKey ) );
|
||||
CFTypeID type = CFGetTypeID( refTopElement );
|
||||
if( type == CFArrayGetTypeID() )
|
||||
{
|
||||
CFRange range = { 0, CFArrayGetCount( refTopElement ) };
|
||||
CFArrayApplyFunction( refTopElement,
|
||||
range,
|
||||
GetElementsCFArrayHandler,
|
||||
(void*) joystick);
|
||||
}
|
||||
|
||||
deviceCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Close all opened joystick handles
|
||||
//========================================================================
|
||||
|
||||
void _glfwTerminateJoysticks( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < GLFW_JOYSTICK_LAST + 1; i++ )
|
||||
{
|
||||
_glfwJoystick* joystick = &_glfwJoysticks[i];
|
||||
removeJoystick( joystick );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Determine joystick capabilities
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickParam( int joy, int param )
|
||||
{
|
||||
if( !_glfwJoysticks[joy].present )
|
||||
{
|
||||
// TODO: Figure out if this is an error
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
switch( param )
|
||||
{
|
||||
case GLFW_PRESENT:
|
||||
return GL_TRUE;
|
||||
|
||||
case GLFW_AXES:
|
||||
return (int) CFArrayGetCount( _glfwJoysticks[joy].axes );
|
||||
|
||||
case GLFW_BUTTONS:
|
||||
return (int) CFArrayGetCount( _glfwJoysticks[joy].buttons ) +
|
||||
((int) CFArrayGetCount( _glfwJoysticks[joy].hats )) * 4;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick axis positions
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_LAST )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
_glfwJoystick joystick = _glfwJoysticks[joy];
|
||||
|
||||
if( !joystick.present )
|
||||
{
|
||||
// TODO: Figure out if this is an error
|
||||
return 0;
|
||||
}
|
||||
|
||||
numaxes = numaxes < joystick.numAxes ? numaxes : joystick.numAxes;
|
||||
|
||||
// Update joystick state
|
||||
pollJoystickEvents();
|
||||
|
||||
for( i = 0; i < numaxes; i++ )
|
||||
{
|
||||
_glfwJoystickElement* axes =
|
||||
(_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick.axes, i );
|
||||
|
||||
long readScale = axes->maxReport - axes->minReport;
|
||||
|
||||
if( readScale == 0 )
|
||||
{
|
||||
pos[i] = axes->value;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos[i] = (2.0f * (axes->value - axes->minReport) / readScale) - 1.0f;
|
||||
}
|
||||
|
||||
//printf("%ld, %ld, %ld\n", axes->value, axes->minReport, axes->maxReport);
|
||||
|
||||
if( i & 1 )
|
||||
{
|
||||
pos[i] = -pos[i];
|
||||
}
|
||||
}
|
||||
|
||||
return numaxes;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick button states
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons )
|
||||
{
|
||||
int i, j, button;
|
||||
|
||||
if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_LAST )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
_glfwJoystick joystick = _glfwJoysticks[joy];
|
||||
|
||||
if( !joystick.present )
|
||||
{
|
||||
// TODO: Figure out if this is an error
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Update joystick state
|
||||
pollJoystickEvents();
|
||||
|
||||
for( button = 0; button < numbuttons && button < joystick.numButtons; button++ )
|
||||
{
|
||||
_glfwJoystickElement* element = (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick.buttons, button );
|
||||
buttons[button] = element->value ? GLFW_PRESS : GLFW_RELEASE;
|
||||
}
|
||||
|
||||
// Virtual buttons - Inject data from hats
|
||||
// Each hat is exposed as 4 buttons which exposes 8 directions with concurrent button presses
|
||||
|
||||
const int directions[9] = { 1, 3, 2, 6, 4, 12, 8, 9, 0 }; // Bit fields of button presses for each direction, including nil
|
||||
|
||||
for( i = 0; i < joystick.numHats; i++ )
|
||||
{
|
||||
_glfwJoystickElement* hat = (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick.hats, i );
|
||||
int value = hat->value;
|
||||
if( value < 0 || value > 8 )
|
||||
{
|
||||
value = 8;
|
||||
}
|
||||
|
||||
for( j = 0; j < 4 && button < numbuttons; j++ )
|
||||
{
|
||||
buttons[button++] = directions[value] & (1 << j) ? GLFW_PRESS : GLFW_RELEASE;
|
||||
}
|
||||
}
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
414
ogl_editor/external/glfw/lib/cocoa/cocoa_thread.c
vendored
Normal file
414
ogl_editor/external/glfw/lib/cocoa/cocoa_thread.c
vendored
Normal file
@ -0,0 +1,414 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// _glfwNewThread() - This is simply a "wrapper" for calling the user
|
||||
// thread function.
|
||||
//========================================================================
|
||||
|
||||
void * _glfwNewThread( void * arg )
|
||||
{
|
||||
GLFWthreadfun threadfun;
|
||||
_GLFWthread *t;
|
||||
|
||||
// Get pointer to thread information for current thread
|
||||
t = _glfwGetThreadPointer( glfwGetThreadID() );
|
||||
if( t == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get user thread function pointer
|
||||
threadfun = t->Function;
|
||||
|
||||
// Call the user thread function
|
||||
threadfun( arg );
|
||||
|
||||
// Remove thread from thread list
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
_glfwRemoveThread( t );
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// When the thread function returns, the thread will die...
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformCreateThread() - Create a new thread
|
||||
//========================================================================
|
||||
|
||||
GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg )
|
||||
{
|
||||
GLFWthread ID;
|
||||
_GLFWthread *t;
|
||||
int result;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Create a new thread information memory area
|
||||
t = (_GLFWthread *) malloc( sizeof(_GLFWthread) );
|
||||
if( t == NULL )
|
||||
{
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get a new unique thread id
|
||||
ID = _glfwThrd.NextID ++;
|
||||
|
||||
// Store thread information in the thread list
|
||||
t->Function = fun;
|
||||
t->ID = ID;
|
||||
|
||||
// Create thread
|
||||
result = pthread_create(
|
||||
&t->PosixID, // Thread handle
|
||||
NULL, // Default thread attributes
|
||||
_glfwNewThread, // Thread function (a wrapper function)
|
||||
(void *)arg // Argument to thread is user argument
|
||||
);
|
||||
|
||||
// Did the thread creation fail?
|
||||
if( result != 0 )
|
||||
{
|
||||
free( (void *) t );
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Append thread to thread list
|
||||
_glfwAppendThread( t );
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Return the GLFW thread ID
|
||||
return ID;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformDestroyThread() - Kill a thread. NOTE: THIS IS A VERY
|
||||
// DANGEROUS OPERATION, AND SHOULD NOT BE USED EXCEPT IN EXTREME
|
||||
// SITUATIONS!
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyThread( GLFWthread ID )
|
||||
{
|
||||
_GLFWthread *t;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Get thread information pointer
|
||||
t = _glfwGetThreadPointer( ID );
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return;
|
||||
}
|
||||
|
||||
// Simply murder the process, no mercy!
|
||||
pthread_kill( t->PosixID, SIGKILL );
|
||||
|
||||
// Remove thread from thread list
|
||||
_glfwRemoveThread( t );
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformWaitThread() - Wait for a thread to die
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformWaitThread( GLFWthread ID, int waitmode )
|
||||
{
|
||||
pthread_t thread;
|
||||
_GLFWthread *t;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Get thread information pointer
|
||||
t = _glfwGetThreadPointer( ID );
|
||||
|
||||
// Is the thread already dead?
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
// If got this far, the thread is alive => polling returns FALSE
|
||||
if( waitmode == GLFW_NOWAIT )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Get thread handle
|
||||
thread = t->PosixID;
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Wait for thread to die
|
||||
(void) pthread_join( thread, NULL );
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformGetThreadID() - Return the thread ID for the current
|
||||
// thread
|
||||
//========================================================================
|
||||
|
||||
GLFWthread _glfwPlatformGetThreadID( void )
|
||||
{
|
||||
_GLFWthread *t;
|
||||
GLFWthread ID = -1;
|
||||
pthread_t posixID;
|
||||
|
||||
// Get current thread ID
|
||||
posixID = pthread_self();
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Loop through entire list of threads to find the matching POSIX
|
||||
// thread ID
|
||||
for( t = &_glfwThrd.First; t != NULL; t = t->Next )
|
||||
{
|
||||
if( t->PosixID == posixID )
|
||||
{
|
||||
ID = t->ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Return the found GLFW thread identifier
|
||||
return ID;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformCreateMutex() - Create a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
GLFWmutex _glfwPlatformCreateMutex( void )
|
||||
{
|
||||
pthread_mutex_t *mutex;
|
||||
|
||||
// Allocate memory for mutex
|
||||
mutex = (pthread_mutex_t *) malloc( sizeof( pthread_mutex_t ) );
|
||||
if( !mutex )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialise a mutex object
|
||||
(void) pthread_mutex_init( mutex, NULL );
|
||||
|
||||
// Cast to GLFWmutex and return
|
||||
return (GLFWmutex) mutex;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformDestroyMutex() - Destroy a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Destroy the mutex object
|
||||
pthread_mutex_destroy( (pthread_mutex_t *) mutex );
|
||||
|
||||
// Free memory for mutex object
|
||||
free( (void *) mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformLockMutex() - Request access to a mutex
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformLockMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Wait for mutex to be released
|
||||
(void) pthread_mutex_lock( (pthread_mutex_t *) mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformUnlockMutex() - Release a mutex
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformUnlockMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Release mutex
|
||||
pthread_mutex_unlock( (pthread_mutex_t *) mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformCreateCond() - Create a new condition variable object
|
||||
//========================================================================
|
||||
|
||||
GLFWcond _glfwPlatformCreateCond( void )
|
||||
{
|
||||
pthread_cond_t *cond;
|
||||
|
||||
// Allocate memory for condition variable
|
||||
cond = (pthread_cond_t *) malloc( sizeof(pthread_cond_t) );
|
||||
if( !cond )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialise condition variable
|
||||
(void) pthread_cond_init( cond, NULL );
|
||||
|
||||
// Cast to GLFWcond and return
|
||||
return (GLFWcond) cond;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformDestroyCond() - Destroy a condition variable object
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyCond( GLFWcond cond )
|
||||
{
|
||||
// Destroy the condition variable object
|
||||
(void) pthread_cond_destroy( (pthread_cond_t *) cond );
|
||||
|
||||
// Free memory for condition variable object
|
||||
free( (void *) cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformWaitCond() - Wait for a condition to be raised
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex,
|
||||
double timeout )
|
||||
{
|
||||
struct timeval currenttime;
|
||||
struct timespec wait;
|
||||
long dt_sec, dt_usec;
|
||||
|
||||
// Select infinite or timed wait
|
||||
if( timeout >= GLFW_INFINITY )
|
||||
{
|
||||
// Wait for condition (infinite wait)
|
||||
(void) pthread_cond_wait( (pthread_cond_t *) cond,
|
||||
(pthread_mutex_t *) mutex );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set timeout time, relatvie to current time
|
||||
gettimeofday( ¤ttime, NULL );
|
||||
dt_sec = (long) timeout;
|
||||
dt_usec = (long) ((timeout - (double)dt_sec) * 1000000.0);
|
||||
wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L;
|
||||
if( wait.tv_nsec > 1000000000L )
|
||||
{
|
||||
wait.tv_nsec -= 1000000000L;
|
||||
dt_sec ++;
|
||||
}
|
||||
wait.tv_sec = currenttime.tv_sec + dt_sec;
|
||||
|
||||
// Wait for condition (timed wait)
|
||||
(void) pthread_cond_timedwait( (pthread_cond_t *) cond,
|
||||
(pthread_mutex_t *) mutex, &wait );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformSignalCond() - Signal a condition to one waiting thread
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSignalCond( GLFWcond cond )
|
||||
{
|
||||
// Signal condition
|
||||
(void) pthread_cond_signal( (pthread_cond_t *) cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformBroadcastCond() - Broadcast a condition to all waiting
|
||||
// threads
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformBroadcastCond( GLFWcond cond )
|
||||
{
|
||||
// Broadcast condition
|
||||
(void) pthread_cond_broadcast( (pthread_cond_t *) cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// _glfwPlatformGetNumberOfProcessors() - Return the number of processors
|
||||
// in the system.
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetNumberOfProcessors( void )
|
||||
{
|
||||
int n;
|
||||
|
||||
// Get number of processors online
|
||||
_glfw_numprocessors( n );
|
||||
return n;
|
||||
}
|
||||
|
||||
135
ogl_editor/external/glfw/lib/cocoa/cocoa_time.m
vendored
Normal file
135
ogl_editor/external/glfw/lib/cocoa/cocoa_time.m
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <mach/mach_time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return raw time
|
||||
//========================================================================
|
||||
|
||||
static uint64_t getRawTime( void )
|
||||
{
|
||||
return mach_absolute_time();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Initialise timer
|
||||
//========================================================================
|
||||
|
||||
void _glfwInitTimer( void )
|
||||
{
|
||||
mach_timebase_info_data_t info;
|
||||
mach_timebase_info( &info );
|
||||
|
||||
_glfwLibrary.timer.resolution = (double) info.numer / ( info.denom * 1.0e9 );
|
||||
_glfwLibrary.timer.base = getRawTime();
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Return timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
double _glfwPlatformGetTime( void )
|
||||
{
|
||||
return (double) ( getRawTime() - _glfwLibrary.timer.base ) *
|
||||
_glfwLibrary.timer.resolution;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSetTime( double time )
|
||||
{
|
||||
_glfwLibrary.timer.base = getRawTime() -
|
||||
(uint64_t) ( time / _glfwLibrary.timer.resolution );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Put a thread to sleep for a specified amount of time
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSleep( double time )
|
||||
{
|
||||
if( time == 0.0 )
|
||||
{
|
||||
sched_yield();
|
||||
return;
|
||||
}
|
||||
|
||||
struct timeval currenttime;
|
||||
struct timespec wait;
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
long dt_sec, dt_usec;
|
||||
|
||||
// Not all pthread implementations have a pthread_sleep() function. We
|
||||
// do it the portable way, using a timed wait for a condition that we
|
||||
// will never signal. NOTE: The unistd functions sleep/usleep suspends
|
||||
// the entire PROCESS, not a signle thread, which is why we can not
|
||||
// use them to implement glfwSleep.
|
||||
|
||||
// Set timeout time, relatvie to current time
|
||||
gettimeofday( ¤ttime, NULL );
|
||||
dt_sec = (long) time;
|
||||
dt_usec = (long) ((time - (double)dt_sec) * 1000000.0);
|
||||
wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L;
|
||||
if( wait.tv_nsec > 1000000000L )
|
||||
{
|
||||
wait.tv_nsec -= 1000000000L;
|
||||
dt_sec ++;
|
||||
}
|
||||
wait.tv_sec = currenttime.tv_sec + dt_sec;
|
||||
|
||||
// Initialize condition and mutex objects
|
||||
pthread_mutex_init( &mutex, NULL );
|
||||
pthread_cond_init( &cond, NULL );
|
||||
|
||||
// Do a timed wait
|
||||
pthread_mutex_lock( &mutex );
|
||||
pthread_cond_timedwait( &cond, &mutex, &wait );
|
||||
pthread_mutex_unlock( &mutex );
|
||||
|
||||
// Destroy condition and mutex objects
|
||||
pthread_mutex_destroy( &mutex );
|
||||
pthread_cond_destroy( &cond );
|
||||
}
|
||||
|
||||
1139
ogl_editor/external/glfw/lib/cocoa/cocoa_window.m
vendored
Normal file
1139
ogl_editor/external/glfw/lib/cocoa/cocoa_window.m
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11
ogl_editor/external/glfw/lib/cocoa/libglfw.pc.in
vendored
Normal file
11
ogl_editor/external/glfw/lib/cocoa/libglfw.pc.in
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
prefix=@PREFIX@
|
||||
exec_prefix=@PREFIX@
|
||||
libdir=@PREFIX@/lib
|
||||
includedir=@PREFIX@/include
|
||||
|
||||
Name: GLFW
|
||||
Description: A portable framework for OpenGL development
|
||||
Version: 2.7
|
||||
URL: http://www.glfw.org/
|
||||
Libs: -L${libdir} -lglfw -framework Cocoa -framework OpenGL -framework IOKit
|
||||
Cflags: -I${includedir}
|
||||
268
ogl_editor/external/glfw/lib/cocoa/platform.h
vendored
Normal file
268
ogl_editor/external/glfw/lib/cocoa/platform.h
vendored
Normal file
@ -0,0 +1,268 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Cocoa/NSOpenGL
|
||||
// API Version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2009-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
typedef void *id;
|
||||
#endif
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "../../include/GL/glfw.h"
|
||||
|
||||
|
||||
#ifndef GL_VERSION_3_0
|
||||
|
||||
typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint);
|
||||
|
||||
#endif /*GL_VERSION_3_0*/
|
||||
|
||||
|
||||
//========================================================================
|
||||
// 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;
|
||||
|
||||
PFNGLGETSTRINGIPROC GetStringi;
|
||||
|
||||
// ========= 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;
|
||||
|
||||
// Initial desktop mode
|
||||
GLFWvidmode desktopMode;
|
||||
|
||||
// ========= PLATFORM SPECIFIC PART ======================================
|
||||
|
||||
// Timer data
|
||||
struct {
|
||||
double base;
|
||||
double resolution;
|
||||
} timer;
|
||||
|
||||
// dlopen handle for dynamically-loading extension function pointers
|
||||
void *OpenGLFramework;
|
||||
|
||||
id originalMode;
|
||||
|
||||
id autoreleasePool;
|
||||
|
||||
CGEventSourceRef eventSource;
|
||||
|
||||
} _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 );
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Prototypes for platform specific internal functions
|
||||
//========================================================================
|
||||
|
||||
// Time
|
||||
void _glfwInitTimer( void );
|
||||
|
||||
// Joystick
|
||||
void _glfwInitJoysticks( void );
|
||||
void _glfwTerminateJoysticks( void );
|
||||
|
||||
#endif // _platform_h_
|
||||
306
ogl_editor/external/glfw/lib/enable.c
vendored
Normal file
306
ogl_editor/external/glfw/lib/enable.c
vendored
Normal file
@ -0,0 +1,306 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Enable (show) mouse cursor
|
||||
//========================================================================
|
||||
|
||||
static void enableMouseCursor( void )
|
||||
{
|
||||
int centerPosX, centerPosY;
|
||||
|
||||
if( !_glfwWin.opened || !_glfwWin.mouseLock )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Show mouse cursor
|
||||
_glfwPlatformShowMouseCursor();
|
||||
|
||||
centerPosX = _glfwWin.width / 2;
|
||||
centerPosY = _glfwWin.height / 2;
|
||||
|
||||
if( centerPosX != _glfwInput.MousePosX || centerPosY != _glfwInput.MousePosY )
|
||||
{
|
||||
_glfwPlatformSetMouseCursorPos( centerPosX, centerPosY );
|
||||
|
||||
_glfwInput.MousePosX = centerPosX;
|
||||
_glfwInput.MousePosY = centerPosY;
|
||||
|
||||
if( _glfwWin.mousePosCallback )
|
||||
{
|
||||
_glfwWin.mousePosCallback( _glfwInput.MousePosX,
|
||||
_glfwInput.MousePosY );
|
||||
}
|
||||
}
|
||||
|
||||
// From now on the mouse is unlocked
|
||||
_glfwWin.mouseLock = GL_FALSE;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable (hide) mouse cursor
|
||||
//========================================================================
|
||||
|
||||
static void disableMouseCursor( void )
|
||||
{
|
||||
if( !_glfwWin.opened || _glfwWin.mouseLock )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Hide mouse cursor
|
||||
_glfwPlatformHideMouseCursor();
|
||||
|
||||
// From now on the mouse is locked
|
||||
_glfwWin.mouseLock = GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Enable sticky keys
|
||||
//========================================================================
|
||||
|
||||
static void enableStickyKeys( void )
|
||||
{
|
||||
_glfwInput.StickyKeys = 1;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable sticky keys
|
||||
//========================================================================
|
||||
|
||||
static void disableStickyKeys( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
_glfwInput.StickyKeys = 0;
|
||||
|
||||
// Release all sticky keys
|
||||
for( i = 0; i <= GLFW_KEY_LAST; i++ )
|
||||
{
|
||||
if( _glfwInput.Key[ i ] == 2 )
|
||||
{
|
||||
_glfwInput.Key[ i ] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Enable sticky mouse buttons
|
||||
//========================================================================
|
||||
|
||||
static void enableStickyMouseButtons( void )
|
||||
{
|
||||
_glfwInput.StickyMouseButtons = 1;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable sticky mouse buttons
|
||||
//========================================================================
|
||||
|
||||
static void disableStickyMouseButtons( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
_glfwInput.StickyMouseButtons = 0;
|
||||
|
||||
// Release all sticky mouse buttons
|
||||
for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i++ )
|
||||
{
|
||||
if( _glfwInput.MouseButton[ i ] == 2 )
|
||||
{
|
||||
_glfwInput.MouseButton[ i ] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Enable system keys
|
||||
//========================================================================
|
||||
|
||||
static void enableSystemKeys( void )
|
||||
{
|
||||
if( !_glfwWin.sysKeysDisabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformEnableSystemKeys();
|
||||
|
||||
// Indicate that system keys are no longer disabled
|
||||
_glfwWin.sysKeysDisabled = GL_FALSE;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable system keys
|
||||
//========================================================================
|
||||
|
||||
static void disableSystemKeys( void )
|
||||
{
|
||||
if( _glfwWin.sysKeysDisabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformDisableSystemKeys();
|
||||
|
||||
// Indicate that system keys are now disabled
|
||||
_glfwWin.sysKeysDisabled = GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Enable key repeat
|
||||
//========================================================================
|
||||
|
||||
static void enableKeyRepeat( void )
|
||||
{
|
||||
_glfwInput.KeyRepeat = 1;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable key repeat
|
||||
//========================================================================
|
||||
|
||||
static void disableKeyRepeat( void )
|
||||
{
|
||||
_glfwInput.KeyRepeat = 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Enable automatic event polling
|
||||
//========================================================================
|
||||
|
||||
static void enableAutoPollEvents( void )
|
||||
{
|
||||
_glfwWin.autoPollEvents = 1;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable automatic event polling
|
||||
//========================================================================
|
||||
|
||||
static void disableAutoPollEvents( void )
|
||||
{
|
||||
_glfwWin.autoPollEvents = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Enable certain GLFW/window/system functions.
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwEnable( int token )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch( token )
|
||||
{
|
||||
case GLFW_MOUSE_CURSOR:
|
||||
enableMouseCursor();
|
||||
break;
|
||||
case GLFW_STICKY_KEYS:
|
||||
enableStickyKeys();
|
||||
break;
|
||||
case GLFW_STICKY_MOUSE_BUTTONS:
|
||||
enableStickyMouseButtons();
|
||||
break;
|
||||
case GLFW_SYSTEM_KEYS:
|
||||
enableSystemKeys();
|
||||
break;
|
||||
case GLFW_KEY_REPEAT:
|
||||
enableKeyRepeat();
|
||||
break;
|
||||
case GLFW_AUTO_POLL_EVENTS:
|
||||
enableAutoPollEvents();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Disable certain GLFW/window/system functions.
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwDisable( int token )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch( token )
|
||||
{
|
||||
case GLFW_MOUSE_CURSOR:
|
||||
disableMouseCursor();
|
||||
break;
|
||||
case GLFW_STICKY_KEYS:
|
||||
disableStickyKeys();
|
||||
break;
|
||||
case GLFW_STICKY_MOUSE_BUTTONS:
|
||||
disableStickyMouseButtons();
|
||||
break;
|
||||
case GLFW_SYSTEM_KEYS:
|
||||
disableSystemKeys();
|
||||
break;
|
||||
case GLFW_KEY_REPEAT:
|
||||
disableKeyRepeat();
|
||||
break;
|
||||
case GLFW_AUTO_POLL_EVENTS:
|
||||
disableAutoPollEvents();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
94
ogl_editor/external/glfw/lib/fullscreen.c
vendored
Normal file
94
ogl_editor/external/glfw/lib/fullscreen.c
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Get a list of available video modes
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetVideoModes( GLFWvidmode *list, int maxcount )
|
||||
{
|
||||
int count, i, swap, res1, res2, depth1, depth2;
|
||||
GLFWvidmode vm;
|
||||
|
||||
if( !_glfwInitialized || maxcount <= 0 || list == (GLFWvidmode*) 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get list of video modes
|
||||
count = _glfwPlatformGetVideoModes( list, maxcount );
|
||||
|
||||
// Sort list (bubble sort)
|
||||
do
|
||||
{
|
||||
swap = 0;
|
||||
for( i = 0; i < count-1; ++ i )
|
||||
{
|
||||
res1 = list[i].Width*list[i].Height;
|
||||
depth1 = list[i].RedBits+list[i].GreenBits+list[i].BlueBits;
|
||||
res2 = list[i+1].Width*list[i+1].Height;
|
||||
depth2 = list[i+1].RedBits+list[i+1].GreenBits+
|
||||
list[i+1].BlueBits;
|
||||
if( (depth2<depth1) || ((depth2==depth1) && (res2<res1)) )
|
||||
{
|
||||
vm = list[i];
|
||||
list[i] = list[i+1];
|
||||
list[i+1] = vm;
|
||||
swap = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
while( swap );
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the desktop video mode
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetDesktopMode( GLFWvidmode *mode )
|
||||
{
|
||||
if( !_glfwInitialized || !mode )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
*mode = _glfwLibrary.desktopMode;
|
||||
}
|
||||
|
||||
284
ogl_editor/external/glfw/lib/glext.c
vendored
Normal file
284
ogl_editor/external/glfw/lib/glext.c
vendored
Normal file
@ -0,0 +1,284 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
#ifndef GL_VERSION_3_0
|
||||
#define GL_NUM_EXTENSIONS 0x821D
|
||||
#define GL_CONTEXT_FLAGS 0x821E
|
||||
#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_3_2
|
||||
#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
|
||||
#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
|
||||
#define GL_CONTEXT_PROFILE_MASK 0x9126
|
||||
#endif
|
||||
|
||||
//========================================================================
|
||||
// Parses the OpenGL version string and extracts the version number
|
||||
//========================================================================
|
||||
|
||||
void _glfwParseGLVersion( int *major, int *minor, int *rev )
|
||||
{
|
||||
GLuint _major, _minor = 0, _rev = 0;
|
||||
const GLubyte *version;
|
||||
const GLubyte *ptr;
|
||||
|
||||
// Get OpenGL version string
|
||||
version = glGetString( GL_VERSION );
|
||||
if( !version )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse string
|
||||
ptr = version;
|
||||
for( _major = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ )
|
||||
{
|
||||
_major = 10*_major + (*ptr - '0');
|
||||
}
|
||||
if( *ptr == '.' )
|
||||
{
|
||||
ptr ++;
|
||||
for( _minor = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ )
|
||||
{
|
||||
_minor = 10*_minor + (*ptr - '0');
|
||||
}
|
||||
if( *ptr == '.' )
|
||||
{
|
||||
ptr ++;
|
||||
for( _rev = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ )
|
||||
{
|
||||
_rev = 10*_rev + (*ptr - '0');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return parsed values
|
||||
*major = _major;
|
||||
*minor = _minor;
|
||||
*rev = _rev;
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Check if a string can be found in an OpenGL extension string
|
||||
//========================================================================
|
||||
|
||||
int _glfwStringInExtensionString( const char *string,
|
||||
const GLubyte *extensions )
|
||||
{
|
||||
const GLubyte *start;
|
||||
GLubyte *where, *terminator;
|
||||
|
||||
// It takes a bit of care to be fool-proof about parsing the
|
||||
// OpenGL extensions string. Don't be fooled by sub-strings,
|
||||
// etc.
|
||||
start = extensions;
|
||||
while( 1 )
|
||||
{
|
||||
where = (GLubyte *) strstr( (const char *) start, string );
|
||||
if( !where )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
terminator = where + strlen( string );
|
||||
if( where == start || *(where - 1) == ' ' )
|
||||
{
|
||||
if( *terminator == ' ' || *terminator == '\0' )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
start = terminator;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Reads back OpenGL context properties from the current context
|
||||
//========================================================================
|
||||
|
||||
void _glfwRefreshContextParams( void )
|
||||
{
|
||||
_glfwParseGLVersion( &_glfwWin.glMajor, &_glfwWin.glMinor,
|
||||
&_glfwWin.glRevision );
|
||||
|
||||
_glfwWin.glProfile = 0;
|
||||
_glfwWin.glForward = GL_FALSE;
|
||||
|
||||
// Read back the context profile, if applicable
|
||||
if( _glfwWin.glMajor >= 3 )
|
||||
{
|
||||
GLint flags;
|
||||
glGetIntegerv( GL_CONTEXT_FLAGS, &flags );
|
||||
|
||||
if( flags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT )
|
||||
{
|
||||
_glfwWin.glForward = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if( _glfwWin.glMajor > 3 ||
|
||||
( _glfwWin.glMajor == 3 && _glfwWin.glMinor >= 2 ) )
|
||||
{
|
||||
GLint mask;
|
||||
glGetIntegerv( GL_CONTEXT_PROFILE_MASK, &mask );
|
||||
|
||||
if( mask & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT )
|
||||
{
|
||||
_glfwWin.glProfile = GLFW_OPENGL_COMPAT_PROFILE;
|
||||
}
|
||||
else if( mask & GL_CONTEXT_CORE_PROFILE_BIT )
|
||||
{
|
||||
_glfwWin.glProfile = GLFW_OPENGL_CORE_PROFILE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Check if an OpenGL extension is available at runtime
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwExtensionSupported( const char *extension )
|
||||
{
|
||||
const GLubyte *extensions;
|
||||
GLubyte *where;
|
||||
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Extension names should not have spaces
|
||||
where = (GLubyte *) strchr( extension, ' ' );
|
||||
if( where || *extension == '\0' )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if( _glfwWin.glMajor < 3 )
|
||||
{
|
||||
// Check if extension is in the old style OpenGL extensions string
|
||||
|
||||
extensions = glGetString( GL_EXTENSIONS );
|
||||
if( extensions != NULL )
|
||||
{
|
||||
if( _glfwStringInExtensionString( extension, extensions ) )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Check if extension is in the modern OpenGL extensions string list
|
||||
|
||||
GLint count;
|
||||
int i;
|
||||
|
||||
glGetIntegerv( GL_NUM_EXTENSIONS, &count );
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
{
|
||||
if( strcmp( (const char*) _glfwWin.GetStringi( GL_EXTENSIONS, i ),
|
||||
extension ) == 0 )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Additional platform specific extension checking (e.g. WGL)
|
||||
if( _glfwPlatformExtensionSupported( extension ) )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the function pointer to an OpenGL function. This function can be
|
||||
// used to get access to extended OpenGL functions.
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void * GLFWAPIENTRY glfwGetProcAddress( const char *procname )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetProcAddress( procname );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Returns the OpenGL version
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetGLVersion( int *major, int *minor, int *rev )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( major != NULL )
|
||||
{
|
||||
*major = _glfwWin.glMajor;
|
||||
}
|
||||
if( minor != NULL )
|
||||
{
|
||||
*minor = _glfwWin.glMinor;
|
||||
}
|
||||
if( rev != NULL )
|
||||
{
|
||||
*rev = _glfwWin.glRevision;
|
||||
}
|
||||
}
|
||||
|
||||
629
ogl_editor/external/glfw/lib/image.c
vendored
Normal file
629
ogl_editor/external/glfw/lib/image.c
vendored
Normal file
@ -0,0 +1,629 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
//========================================================================
|
||||
// Description:
|
||||
//
|
||||
// This module acts as an interface for different image file formats (the
|
||||
// image file format is detected automatically).
|
||||
//
|
||||
// By default the loaded image is rescaled (using bilinear interpolation)
|
||||
// to the next higher 2^N x 2^M resolution, unless it has a valid
|
||||
// 2^N x 2^M resolution. The interpolation is quite slow, even if the
|
||||
// routine has been optimized for speed (a 200x200 RGB image is scaled to
|
||||
// 256x256 in ~30 ms on a P3-500).
|
||||
//
|
||||
// Paletted images are converted to RGB/RGBA images.
|
||||
//
|
||||
// A convenience function is also included (glfwLoadTexture2D), which
|
||||
// loads a texture image from a file directly to OpenGL texture memory,
|
||||
// with an option to generate all mipmap levels. GL_SGIS_generate_mipmap
|
||||
// is used whenever available, which should give an optimal mipmap
|
||||
// generation speed (possibly performed in hardware). A software fallback
|
||||
// method is included when GL_SGIS_generate_mipmap is not supported (it
|
||||
// generates all mipmaps of a 256x256 RGB texture in ~3 ms on a P3-500).
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
// We want to support automatic mipmap generation
|
||||
#ifndef GL_SGIS_generate_mipmap
|
||||
#define GL_GENERATE_MIPMAP_SGIS 0x8191
|
||||
#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
|
||||
#define GL_SGIS_generate_mipmap 1
|
||||
#endif // GL_SGIS_generate_mipmap
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Upsample image, from size w1 x h1 to w2 x h2
|
||||
//========================================================================
|
||||
|
||||
static void UpsampleImage( unsigned char *src, unsigned char *dst,
|
||||
int w1, int h1, int w2, int h2, int bpp )
|
||||
{
|
||||
int m, n, k, x, y, col8;
|
||||
float dx, dy, xstep, ystep, col, col1, col2;
|
||||
unsigned char *src1, *src2, *src3, *src4;
|
||||
|
||||
// Calculate scaling factor
|
||||
xstep = (float)(w1-1) / (float)(w2-1);
|
||||
ystep = (float)(h1-1) / (float)(h2-1);
|
||||
|
||||
// Copy source data to destination data with bilinear interpolation
|
||||
// Note: The rather strange look of this routine is a direct result of
|
||||
// my attempts at optimizing it. Improvements are welcome!
|
||||
dy = 0.0f;
|
||||
y = 0;
|
||||
for( n = 0; n < h2; n ++ )
|
||||
{
|
||||
dx = 0.0f;
|
||||
src1 = &src[ y*w1*bpp ];
|
||||
src3 = y < (h1-1) ? src1 + w1*bpp : src1;
|
||||
src2 = src1 + bpp;
|
||||
src4 = src3 + bpp;
|
||||
x = 0;
|
||||
for( m = 0; m < w2; m ++ )
|
||||
{
|
||||
for( k = 0; k < bpp; k ++ )
|
||||
{
|
||||
col1 = *src1 ++;
|
||||
col2 = *src2 ++;
|
||||
col = col1 + (col2 - col1) * dx;
|
||||
col1 = *src3 ++;
|
||||
col2 = *src4 ++;
|
||||
col2 = col1 + (col2 - col1) * dx;
|
||||
col += (col2 - col) * dy;
|
||||
col8 = (int) (col + 0.5);
|
||||
if( col8 >= 256 ) col8 = 255;
|
||||
*dst++ = (unsigned char) col8;
|
||||
}
|
||||
dx += xstep;
|
||||
if( dx >= 1.0f )
|
||||
{
|
||||
x ++;
|
||||
dx -= 1.0f;
|
||||
if( x >= (w1-1) )
|
||||
{
|
||||
src2 = src1;
|
||||
src4 = src3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
src1 -= bpp;
|
||||
src2 -= bpp;
|
||||
src3 -= bpp;
|
||||
src4 -= bpp;
|
||||
}
|
||||
}
|
||||
dy += ystep;
|
||||
if( dy >= 1.0f )
|
||||
{
|
||||
y ++;
|
||||
dy -= 1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Build the next mip-map level
|
||||
//========================================================================
|
||||
|
||||
static int HalveImage( GLubyte *src, int *width, int *height,
|
||||
int components )
|
||||
{
|
||||
int halfwidth, halfheight, m, n, k, idx1, idx2;
|
||||
GLubyte *dst;
|
||||
|
||||
// Last level?
|
||||
if( *width <= 1 && *height <= 1 )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Calculate new width and height (handle 1D case)
|
||||
halfwidth = *width > 1 ? *width / 2 : 1;
|
||||
halfheight = *height > 1 ? *height / 2 : 1;
|
||||
|
||||
// Downsample image with a simple box-filter
|
||||
dst = src;
|
||||
if( *width == 1 || *height == 1 )
|
||||
{
|
||||
// 1D case
|
||||
for( m = 0; m < halfwidth+halfheight-1; m ++ )
|
||||
{
|
||||
for( k = 0; k < components; k ++ )
|
||||
{
|
||||
*dst ++ = (GLubyte) (((int)*src +
|
||||
(int)src[components] + 1) >> 1);
|
||||
src ++;
|
||||
}
|
||||
src += components;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 2D case
|
||||
idx1 = *width*components;
|
||||
idx2 = (*width+1)*components;
|
||||
for( m = 0; m < halfheight; m ++ )
|
||||
{
|
||||
for( n = 0; n < halfwidth; n ++ )
|
||||
{
|
||||
for( k = 0; k < components; k ++ )
|
||||
{
|
||||
*dst ++ = (GLubyte) (((int)*src +
|
||||
(int)src[components] +
|
||||
(int)src[idx1] +
|
||||
(int)src[idx2] + 2) >> 2);
|
||||
src ++;
|
||||
}
|
||||
src += components;
|
||||
}
|
||||
src += components * (*width);
|
||||
}
|
||||
}
|
||||
|
||||
// Return new width and height
|
||||
*width = halfwidth;
|
||||
*height = halfheight;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Rescales an image into power-of-two dimensions
|
||||
//========================================================================
|
||||
|
||||
static int RescaleImage( GLFWimage* image )
|
||||
{
|
||||
int width, height, log2, newsize;
|
||||
unsigned char *data;
|
||||
|
||||
// Calculate next larger 2^N width
|
||||
for( log2 = 0, width = image->Width; width > 1; width >>= 1, log2 ++ )
|
||||
;
|
||||
|
||||
width = (int) 1 << log2;
|
||||
if( width < image->Width )
|
||||
{
|
||||
width <<= 1;
|
||||
}
|
||||
|
||||
// Calculate next larger 2^M height
|
||||
for( log2 = 0, height = image->Height; height > 1; height >>= 1, log2 ++ )
|
||||
;
|
||||
|
||||
height = (int) 1 << log2;
|
||||
if( height < image->Height )
|
||||
{
|
||||
height <<= 1;
|
||||
}
|
||||
|
||||
// Do we really need to rescale?
|
||||
if( width != image->Width || height != image->Height )
|
||||
{
|
||||
// Allocate memory for new (upsampled) image data
|
||||
newsize = width * height * image->BytesPerPixel;
|
||||
data = (unsigned char *) malloc( newsize );
|
||||
if( data == NULL )
|
||||
{
|
||||
free( image->Data );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Copy old image data to new image data with interpolation
|
||||
UpsampleImage( image->Data, data, image->Width, image->Height,
|
||||
width, height, image->BytesPerPixel );
|
||||
|
||||
// Free memory for old image data (not needed anymore)
|
||||
free( image->Data );
|
||||
|
||||
// Set pointer to new image data, and set new image dimensions
|
||||
image->Data = data;
|
||||
image->Width = width;
|
||||
image->Height = height;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Read an image from a named file
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwReadImage( const char *name, GLFWimage *img,
|
||||
int flags )
|
||||
{
|
||||
_GLFWstream stream;
|
||||
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Start with an empty image descriptor
|
||||
img->Width = 0;
|
||||
img->Height = 0;
|
||||
img->BytesPerPixel = 0;
|
||||
img->Data = NULL;
|
||||
|
||||
// Open file
|
||||
if( !_glfwOpenFileStream( &stream, name, "rb" ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// We only support TGA files at the moment
|
||||
if( !_glfwReadTGA( &stream, img, flags ) )
|
||||
{
|
||||
_glfwCloseStream( &stream );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Close stream
|
||||
_glfwCloseStream( &stream );
|
||||
|
||||
// Should we rescale the image to closest 2^N x 2^M resolution?
|
||||
if( !(flags & GLFW_NO_RESCALE_BIT) )
|
||||
{
|
||||
if( !RescaleImage( img ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// Interpret BytesPerPixel as an OpenGL format
|
||||
switch( img->BytesPerPixel )
|
||||
{
|
||||
default:
|
||||
case 1:
|
||||
if( flags & GLFW_ALPHA_MAP_BIT )
|
||||
{
|
||||
img->Format = GL_ALPHA;
|
||||
}
|
||||
else
|
||||
{
|
||||
img->Format = GL_LUMINANCE;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
img->Format = GL_RGB;
|
||||
break;
|
||||
case 4:
|
||||
img->Format = GL_RGBA;
|
||||
break;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Read an image file from a memory buffer
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwReadMemoryImage( const void *data, long size, GLFWimage *img, int flags )
|
||||
{
|
||||
_GLFWstream stream;
|
||||
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Start with an empty image descriptor
|
||||
img->Width = 0;
|
||||
img->Height = 0;
|
||||
img->BytesPerPixel = 0;
|
||||
img->Data = NULL;
|
||||
|
||||
// Open buffer
|
||||
if( !_glfwOpenBufferStream( &stream, (void*) data, size ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// We only support TGA files at the moment
|
||||
if( !_glfwReadTGA( &stream, img, flags ) )
|
||||
{
|
||||
_glfwCloseStream( &stream );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Close stream
|
||||
_glfwCloseStream( &stream );
|
||||
|
||||
// Should we rescale the image to closest 2^N x 2^M resolution?
|
||||
if( !(flags & GLFW_NO_RESCALE_BIT) )
|
||||
{
|
||||
if( !RescaleImage( img ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// Interpret BytesPerPixel as an OpenGL format
|
||||
switch( img->BytesPerPixel )
|
||||
{
|
||||
default:
|
||||
case 1:
|
||||
if( flags & GLFW_ALPHA_MAP_BIT )
|
||||
{
|
||||
img->Format = GL_ALPHA;
|
||||
}
|
||||
else
|
||||
{
|
||||
img->Format = GL_LUMINANCE;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
img->Format = GL_RGB;
|
||||
break;
|
||||
case 4:
|
||||
img->Format = GL_RGBA;
|
||||
break;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Free allocated memory for an image
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwFreeImage( GLFWimage *img )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Free memory
|
||||
if( img->Data != NULL )
|
||||
{
|
||||
free( img->Data );
|
||||
img->Data = NULL;
|
||||
}
|
||||
|
||||
// Clear all fields
|
||||
img->Width = 0;
|
||||
img->Height = 0;
|
||||
img->Format = 0;
|
||||
img->BytesPerPixel = 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Read an image from a file, and upload it to texture memory
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwLoadTexture2D( const char *name, int flags )
|
||||
{
|
||||
GLFWimage img;
|
||||
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Force rescaling if necessary
|
||||
if( !_glfwWin.has_GL_ARB_texture_non_power_of_two )
|
||||
{
|
||||
flags &= (~GLFW_NO_RESCALE_BIT);
|
||||
}
|
||||
|
||||
// Read image from file
|
||||
if( !glfwReadImage( name, &img, flags ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if( !glfwLoadTextureImage2D( &img, flags ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Data buffer is not needed anymore
|
||||
glfwFreeImage( &img );
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Read an image from a buffer, and upload it to texture memory
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwLoadMemoryTexture2D( const void *data, long size, int flags )
|
||||
{
|
||||
GLFWimage img;
|
||||
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Force rescaling if necessary
|
||||
if( !_glfwWin.has_GL_ARB_texture_non_power_of_two )
|
||||
{
|
||||
flags &= (~GLFW_NO_RESCALE_BIT);
|
||||
}
|
||||
|
||||
// Read image from file
|
||||
if( !glfwReadMemoryImage( data, size, &img, flags ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if( !glfwLoadTextureImage2D( &img, flags ) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Data buffer is not needed anymore
|
||||
glfwFreeImage( &img );
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Upload an image object to texture memory
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwLoadTextureImage2D( GLFWimage *img, int flags )
|
||||
{
|
||||
GLint UnpackAlignment, GenMipMap;
|
||||
int level, format, AutoGen, newsize, n;
|
||||
unsigned char *data, *dataptr;
|
||||
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// TODO: Use GL_MAX_TEXTURE_SIZE or GL_PROXY_TEXTURE_2D to determine
|
||||
// whether the image size is valid.
|
||||
// NOTE: May require box filter downsampling routine.
|
||||
|
||||
// Do we need to convert the alpha map to RGBA format (OpenGL 1.0)?
|
||||
if( (_glfwWin.glMajor == 1) && (_glfwWin.glMinor == 0) &&
|
||||
(img->Format == GL_ALPHA) )
|
||||
{
|
||||
// We go to RGBA representation instead
|
||||
img->BytesPerPixel = 4;
|
||||
|
||||
// Allocate memory for new RGBA image data
|
||||
newsize = img->Width * img->Height * img->BytesPerPixel;
|
||||
data = (unsigned char *) malloc( newsize );
|
||||
if( data == NULL )
|
||||
{
|
||||
free( img->Data );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Convert Alpha map to RGBA
|
||||
dataptr = data;
|
||||
for( n = 0; n < (img->Width*img->Height); ++ n )
|
||||
{
|
||||
*dataptr ++ = 255;
|
||||
*dataptr ++ = 255;
|
||||
*dataptr ++ = 255;
|
||||
*dataptr ++ = img->Data[n];
|
||||
}
|
||||
|
||||
// Free memory for old image data (not needed anymore)
|
||||
free( img->Data );
|
||||
|
||||
// Set pointer to new image data
|
||||
img->Data = data;
|
||||
}
|
||||
|
||||
// Set unpack alignment to one byte
|
||||
glGetIntegerv( GL_UNPACK_ALIGNMENT, &UnpackAlignment );
|
||||
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
|
||||
|
||||
// Should we use automatic mipmap generation?
|
||||
AutoGen = ( flags & GLFW_BUILD_MIPMAPS_BIT ) &&
|
||||
_glfwWin.has_GL_SGIS_generate_mipmap;
|
||||
|
||||
// Enable automatic mipmap generation
|
||||
if( AutoGen )
|
||||
{
|
||||
glGetTexParameteriv( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS,
|
||||
&GenMipMap );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS,
|
||||
GL_TRUE );
|
||||
}
|
||||
|
||||
// Format specification is different for OpenGL 1.0
|
||||
if( _glfwWin.glMajor == 1 && _glfwWin.glMinor == 0 )
|
||||
{
|
||||
format = img->BytesPerPixel;
|
||||
}
|
||||
else
|
||||
{
|
||||
format = img->Format;
|
||||
}
|
||||
|
||||
// Upload to texture memeory
|
||||
level = 0;
|
||||
do
|
||||
{
|
||||
// Upload this mipmap level
|
||||
glTexImage2D( GL_TEXTURE_2D, level, format,
|
||||
img->Width, img->Height, 0, format,
|
||||
GL_UNSIGNED_BYTE, (void*) img->Data );
|
||||
|
||||
// Build next mipmap level manually, if required
|
||||
if( ( flags & GLFW_BUILD_MIPMAPS_BIT ) && !AutoGen )
|
||||
{
|
||||
level = HalveImage( img->Data, &img->Width,
|
||||
&img->Height, img->BytesPerPixel ) ?
|
||||
level + 1 : 0;
|
||||
}
|
||||
}
|
||||
while( level != 0 );
|
||||
|
||||
// Restore old automatic mipmap generation state
|
||||
if( AutoGen )
|
||||
{
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS,
|
||||
GenMipMap );
|
||||
}
|
||||
|
||||
// Restore old unpack alignment
|
||||
glPixelStorei( GL_UNPACK_ALIGNMENT, UnpackAlignment );
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
110
ogl_editor/external/glfw/lib/init.c
vendored
Normal file
110
ogl_editor/external/glfw/lib/init.c
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#define _init_c_
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialize various GLFW state
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwInit( void )
|
||||
{
|
||||
// Is GLFW already initialized?
|
||||
if( _glfwInitialized )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
memset( &_glfwLibrary, 0, sizeof( _glfwLibrary ) );
|
||||
memset( &_glfwWin, 0, sizeof( _glfwWin ) );
|
||||
|
||||
// Window is not yet opened
|
||||
_glfwWin.opened = GL_FALSE;
|
||||
|
||||
// Default enable/disable settings
|
||||
_glfwWin.sysKeysDisabled = GL_FALSE;
|
||||
|
||||
// Clear window hints
|
||||
_glfwClearWindowHints();
|
||||
|
||||
// Platform specific initialization
|
||||
if( !_glfwPlatformInit() )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Form now on, GLFW state is valid
|
||||
_glfwInitialized = GL_TRUE;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Close window and kill all threads.
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwTerminate( void )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Platform specific termination
|
||||
if( !_glfwPlatformTerminate() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// GLFW is no longer initialized
|
||||
_glfwInitialized = GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get GLFW version
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetVersion( int *major, int *minor, int *rev )
|
||||
{
|
||||
if( major != NULL ) *major = GLFW_VERSION_MAJOR;
|
||||
if( minor != NULL ) *minor = GLFW_VERSION_MINOR;
|
||||
if( rev != NULL ) *rev = GLFW_VERSION_REVISION;
|
||||
}
|
||||
|
||||
269
ogl_editor/external/glfw/lib/input.c
vendored
Normal file
269
ogl_editor/external/glfw/lib/input.c
vendored
Normal file
@ -0,0 +1,269 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return key state
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetKey( int key )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return GLFW_RELEASE;
|
||||
}
|
||||
|
||||
// Is it a valid key?
|
||||
if( key < 0 || key > GLFW_KEY_LAST )
|
||||
{
|
||||
return GLFW_RELEASE;
|
||||
}
|
||||
|
||||
if( _glfwInput.Key[ key ] == GLFW_STICK )
|
||||
{
|
||||
// Sticky mode: release key now
|
||||
_glfwInput.Key[ key ] = GLFW_RELEASE;
|
||||
return GLFW_PRESS;
|
||||
}
|
||||
|
||||
return (int) _glfwInput.Key[ key ];
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return mouse button state
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetMouseButton( int button )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return GLFW_RELEASE;
|
||||
}
|
||||
|
||||
// Is it a valid mouse button?
|
||||
if( button < 0 || button > GLFW_MOUSE_BUTTON_LAST )
|
||||
{
|
||||
return GLFW_RELEASE;
|
||||
}
|
||||
|
||||
if( _glfwInput.MouseButton[ button ] == GLFW_STICK )
|
||||
{
|
||||
// Sticky mode: release mouse button now
|
||||
_glfwInput.MouseButton[ button ] = GLFW_RELEASE;
|
||||
return GLFW_PRESS;
|
||||
}
|
||||
|
||||
return (int) _glfwInput.MouseButton[ button ];
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return mouse cursor position
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwGetMousePos( int *xpos, int *ypos )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Return mouse position
|
||||
if( xpos != NULL )
|
||||
{
|
||||
*xpos = _glfwInput.MousePosX;
|
||||
}
|
||||
if( ypos != NULL )
|
||||
{
|
||||
*ypos = _glfwInput.MousePosY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Sets the mouse cursor position
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMousePos( int xpos, int ypos )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't do anything if the mouse position did not change
|
||||
if( xpos == _glfwInput.MousePosX && ypos == _glfwInput.MousePosY )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set GLFW mouse position
|
||||
_glfwInput.MousePosX = xpos;
|
||||
_glfwInput.MousePosY = ypos;
|
||||
|
||||
// If we have a locked mouse, do not change cursor position
|
||||
if( _glfwWin.mouseLock )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Update physical cursor position
|
||||
_glfwPlatformSetMouseCursorPos( xpos, ypos );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return mouse wheel position
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetMouseWheel( void )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Return mouse wheel position
|
||||
return _glfwInput.WheelPos;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set mouse wheel position
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMouseWheel( int pos )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set mouse wheel position
|
||||
_glfwInput.WheelPos = pos;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set callback function for keyboard input
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetKeyCallback( GLFWkeyfun cbfun )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set callback function
|
||||
_glfwWin.keyCallback = cbfun;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set callback function for character input
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetCharCallback( GLFWcharfun cbfun )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set callback function
|
||||
_glfwWin.charCallback = cbfun;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set callback function for mouse clicks
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMouseButtonCallback( GLFWmousebuttonfun cbfun )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set callback function
|
||||
_glfwWin.mouseButtonCallback = cbfun;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set callback function for mouse moves
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMousePosCallback( GLFWmouseposfun cbfun )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set callback function
|
||||
_glfwWin.mousePosCallback = cbfun;
|
||||
|
||||
// Call the callback function to let the application know the current
|
||||
// mouse position
|
||||
if( cbfun )
|
||||
{
|
||||
cbfun( _glfwInput.MousePosX, _glfwInput.MousePosY );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set callback function for mouse wheel
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetMouseWheelCallback( GLFWmousewheelfun cbfun )
|
||||
{
|
||||
if( !_glfwInitialized || !_glfwWin.opened )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set callback function
|
||||
_glfwWin.mouseWheelCallback = cbfun;
|
||||
|
||||
// Call the callback function to let the application know the current
|
||||
// mouse wheel position
|
||||
if( cbfun )
|
||||
{
|
||||
cbfun( _glfwInput.WheelPos );
|
||||
}
|
||||
}
|
||||
|
||||
266
ogl_editor/external/glfw/lib/internal.h
vendored
Normal file
266
ogl_editor/external/glfw/lib/internal.h
vendored
Normal file
@ -0,0 +1,266 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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 );
|
||||
void _glfwRefreshContextParams( void );
|
||||
|
||||
// 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_
|
||||
99
ogl_editor/external/glfw/lib/joystick.c
vendored
Normal file
99
ogl_editor/external/glfw/lib/joystick.c
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Determine joystick capabilities
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetJoystickParam( int joy, int param )
|
||||
{
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetJoystickParam( joy, param );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick axis positions
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetJoystickPos( int joy, float *pos, int numaxes )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Clear positions
|
||||
for( i = 0; i < numaxes; i++ )
|
||||
{
|
||||
pos[ i ] = 0.0f;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetJoystickPos( joy, pos, numaxes );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick button states
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetJoystickButtons( int joy,
|
||||
unsigned char *buttons,
|
||||
int numbuttons )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Clear button states
|
||||
for( i = 0; i < numbuttons; i++ )
|
||||
{
|
||||
buttons[ i ] = GLFW_RELEASE;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetJoystickButtons( joy, buttons, numbuttons );
|
||||
}
|
||||
|
||||
195
ogl_editor/external/glfw/lib/stream.c
vendored
Normal file
195
ogl_editor/external/glfw/lib/stream.c
vendored
Normal file
@ -0,0 +1,195 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Opens a GLFW stream with a file
|
||||
//========================================================================
|
||||
|
||||
int _glfwOpenFileStream( _GLFWstream *stream, const char* name, const char* mode )
|
||||
{
|
||||
memset( stream, 0, sizeof(_GLFWstream) );
|
||||
|
||||
stream->file = fopen( name, mode );
|
||||
if( stream->file == NULL )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Opens a GLFW stream with a memory block
|
||||
//========================================================================
|
||||
|
||||
int _glfwOpenBufferStream( _GLFWstream *stream, void *data, long size )
|
||||
{
|
||||
memset( stream, 0, sizeof(_GLFWstream) );
|
||||
|
||||
stream->data = data;
|
||||
stream->size = size;
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Reads data from a GLFW stream
|
||||
//========================================================================
|
||||
|
||||
long _glfwReadStream( _GLFWstream *stream, void *data, long size )
|
||||
{
|
||||
if( stream->file != NULL )
|
||||
{
|
||||
return (long) fread( data, 1, size, stream->file );
|
||||
}
|
||||
|
||||
if( stream->data != NULL )
|
||||
{
|
||||
// Check for EOF
|
||||
if( stream->position == stream->size )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Clamp read size to available data
|
||||
if( stream->position + size > stream->size )
|
||||
{
|
||||
size = stream->size - stream->position;
|
||||
}
|
||||
|
||||
// Perform data read
|
||||
memcpy( data, (unsigned char*) stream->data + stream->position, size );
|
||||
stream->position += size;
|
||||
return size;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Returns the current position of a GLFW stream
|
||||
//========================================================================
|
||||
|
||||
long _glfwTellStream( _GLFWstream *stream )
|
||||
{
|
||||
if( stream->file != NULL )
|
||||
{
|
||||
return ftell( stream->file );
|
||||
}
|
||||
|
||||
if( stream->data != NULL )
|
||||
{
|
||||
return stream->position;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Sets the current position of a GLFW stream
|
||||
//========================================================================
|
||||
|
||||
int _glfwSeekStream( _GLFWstream *stream, long offset, int whence )
|
||||
{
|
||||
long position;
|
||||
|
||||
if( stream->file != NULL )
|
||||
{
|
||||
if( fseek( stream->file, offset, whence ) != 0 )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
if( stream->data != NULL )
|
||||
{
|
||||
position = offset;
|
||||
|
||||
// Handle whence parameter
|
||||
if( whence == SEEK_CUR )
|
||||
{
|
||||
position += stream->position;
|
||||
}
|
||||
else if( whence == SEEK_END )
|
||||
{
|
||||
position += stream->size;
|
||||
}
|
||||
else if( whence != SEEK_SET )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Clamp offset to buffer bounds and apply it
|
||||
if( position > stream->size )
|
||||
{
|
||||
stream->position = stream->size;
|
||||
}
|
||||
else if( position < 0 )
|
||||
{
|
||||
stream->position = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
stream->position = position;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Closes a GLFW stream
|
||||
//========================================================================
|
||||
|
||||
void _glfwCloseStream( _GLFWstream *stream )
|
||||
{
|
||||
if( stream->file != NULL )
|
||||
{
|
||||
fclose( stream->file );
|
||||
}
|
||||
|
||||
// Nothing to be done about (user allocated) memory blocks
|
||||
|
||||
memset( stream, 0, sizeof(_GLFWstream) );
|
||||
}
|
||||
|
||||
404
ogl_editor/external/glfw/lib/tga.c
vendored
Normal file
404
ogl_editor/external/glfw/lib/tga.c
vendored
Normal file
@ -0,0 +1,404 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
//========================================================================
|
||||
// Description:
|
||||
//
|
||||
// TGA format image file loader. This module supports version 1 Targa
|
||||
// images, with these restrictions:
|
||||
// - Pixel format may only be 8, 24 or 32 bits
|
||||
// - Colormaps must be no longer than 256 entries
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions & declarations ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// TGA file header information
|
||||
//========================================================================
|
||||
|
||||
typedef struct {
|
||||
int idlen; // 1 byte
|
||||
int cmaptype; // 1 byte
|
||||
int imagetype; // 1 byte
|
||||
int cmapfirstidx; // 2 bytes
|
||||
int cmaplen; // 2 bytes
|
||||
int cmapentrysize; // 1 byte
|
||||
int xorigin; // 2 bytes
|
||||
int yorigin; // 2 bytes
|
||||
int width; // 2 bytes
|
||||
int height; // 2 bytes
|
||||
int bitsperpixel; // 1 byte
|
||||
int imageinfo; // 1 byte
|
||||
int _alphabits; // (derived from imageinfo)
|
||||
int _origin; // (derived from imageinfo)
|
||||
} _tga_header_t;
|
||||
|
||||
#define _TGA_CMAPTYPE_NONE 0
|
||||
#define _TGA_CMAPTYPE_PRESENT 1
|
||||
|
||||
#define _TGA_IMAGETYPE_NONE 0
|
||||
#define _TGA_IMAGETYPE_CMAP 1
|
||||
#define _TGA_IMAGETYPE_TC 2
|
||||
#define _TGA_IMAGETYPE_GRAY 3
|
||||
#define _TGA_IMAGETYPE_CMAP_RLE 9
|
||||
#define _TGA_IMAGETYPE_TC_RLE 10
|
||||
#define _TGA_IMAGETYPE_GRAY_RLE 11
|
||||
|
||||
#define _TGA_IMAGEINFO_ALPHA_MASK 0x0f
|
||||
#define _TGA_IMAGEINFO_ALPHA_SHIFT 0
|
||||
#define _TGA_IMAGEINFO_ORIGIN_MASK 0x30
|
||||
#define _TGA_IMAGEINFO_ORIGIN_SHIFT 4
|
||||
|
||||
#define _TGA_ORIGIN_BL 0
|
||||
#define _TGA_ORIGIN_BR 1
|
||||
#define _TGA_ORIGIN_UL 2
|
||||
#define _TGA_ORIGIN_UR 3
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Read TGA file header (and check that it is valid)
|
||||
//========================================================================
|
||||
|
||||
static int ReadTGAHeader( _GLFWstream *s, _tga_header_t *h )
|
||||
{
|
||||
unsigned char buf[ 18 ];
|
||||
int pos;
|
||||
|
||||
// Read TGA file header from file
|
||||
pos = _glfwTellStream( s );
|
||||
_glfwReadStream( s, buf, 18 );
|
||||
|
||||
// Interpret header (endian independent parsing)
|
||||
h->idlen = (int) buf[0];
|
||||
h->cmaptype = (int) buf[1];
|
||||
h->imagetype = (int) buf[2];
|
||||
h->cmapfirstidx = (int) buf[3] | (((int) buf[4]) << 8);
|
||||
h->cmaplen = (int) buf[5] | (((int) buf[6]) << 8);
|
||||
h->cmapentrysize = (int) buf[7];
|
||||
h->xorigin = (int) buf[8] | (((int) buf[9]) << 8);
|
||||
h->yorigin = (int) buf[10] | (((int) buf[11]) << 8);
|
||||
h->width = (int) buf[12] | (((int) buf[13]) << 8);
|
||||
h->height = (int) buf[14] | (((int) buf[15]) << 8);
|
||||
h->bitsperpixel = (int) buf[16];
|
||||
h->imageinfo = (int) buf[17];
|
||||
|
||||
// Extract alphabits and origin information
|
||||
h->_alphabits = (int) (h->imageinfo & _TGA_IMAGEINFO_ALPHA_MASK) >>
|
||||
_TGA_IMAGEINFO_ALPHA_SHIFT;
|
||||
h->_origin = (int) (h->imageinfo & _TGA_IMAGEINFO_ORIGIN_MASK) >>
|
||||
_TGA_IMAGEINFO_ORIGIN_SHIFT;
|
||||
|
||||
// Validate TGA header (is this a TGA file?)
|
||||
if( (h->cmaptype == 0 || h->cmaptype == 1) &&
|
||||
((h->imagetype >= 1 && h->imagetype <= 3) ||
|
||||
(h->imagetype >= 9 && h->imagetype <= 11)) &&
|
||||
(h->bitsperpixel == 8 || h->bitsperpixel == 24 ||
|
||||
h->bitsperpixel == 32) )
|
||||
{
|
||||
// Skip the ID field
|
||||
_glfwSeekStream( s, h->idlen, SEEK_CUR );
|
||||
|
||||
// Indicate that the TGA header was valid
|
||||
return GL_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Restore file position
|
||||
_glfwSeekStream( s, pos, SEEK_SET );
|
||||
|
||||
// Indicate that the TGA header was invalid
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Read Run-Length Encoded data
|
||||
//========================================================================
|
||||
|
||||
static void ReadTGA_RLE( unsigned char *buf, int size, int bpp,
|
||||
_GLFWstream *s )
|
||||
{
|
||||
int repcount, bytes, k, n;
|
||||
unsigned char pixel[ 4 ];
|
||||
char c;
|
||||
|
||||
// Dummy check
|
||||
if( bpp > 4 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
while( size > 0 )
|
||||
{
|
||||
// Get repetition count
|
||||
_glfwReadStream( s, &c, 1 );
|
||||
repcount = (unsigned int) c;
|
||||
bytes = ((repcount & 127) + 1) * bpp;
|
||||
if( size < bytes )
|
||||
{
|
||||
bytes = size;
|
||||
}
|
||||
|
||||
// Run-Length packet?
|
||||
if( repcount & 128 )
|
||||
{
|
||||
_glfwReadStream( s, pixel, bpp );
|
||||
for( n = 0; n < (repcount & 127) + 1; n ++ )
|
||||
{
|
||||
for( k = 0; k < bpp; k ++ )
|
||||
{
|
||||
*buf ++ = pixel[ k ];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// It's a Raw packet
|
||||
_glfwReadStream( s, buf, bytes );
|
||||
buf += bytes;
|
||||
}
|
||||
|
||||
size -= bytes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Read a TGA image from a file
|
||||
//========================================================================
|
||||
|
||||
int _glfwReadTGA( _GLFWstream *s, GLFWimage *img, int flags )
|
||||
{
|
||||
_tga_header_t h;
|
||||
unsigned char *cmap, *pix, tmp, *src, *dst;
|
||||
int cmapsize, pixsize, pixsize2;
|
||||
int bpp, bpp2, k, m, n, swapx, swapy;
|
||||
|
||||
// Read TGA header
|
||||
if( !ReadTGAHeader( s, &h ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Is there a colormap?
|
||||
cmapsize = (h.cmaptype == _TGA_CMAPTYPE_PRESENT ? 1 : 0) * h.cmaplen *
|
||||
((h.cmapentrysize+7) / 8);
|
||||
if( cmapsize > 0 )
|
||||
{
|
||||
// Is it a colormap that we can handle?
|
||||
if( (h.cmapentrysize != 24 && h.cmapentrysize != 32) ||
|
||||
h.cmaplen == 0 || h.cmaplen > 256 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Allocate memory for colormap
|
||||
cmap = (unsigned char *) malloc( cmapsize );
|
||||
if( cmap == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Read colormap from file
|
||||
_glfwReadStream( s, cmap, cmapsize );
|
||||
}
|
||||
else
|
||||
{
|
||||
cmap = NULL;
|
||||
}
|
||||
|
||||
// Size of pixel data
|
||||
pixsize = h.width * h.height * ((h.bitsperpixel + 7) / 8);
|
||||
|
||||
// Bytes per pixel (pixel data - unexpanded)
|
||||
bpp = (h.bitsperpixel + 7) / 8;
|
||||
|
||||
// Bytes per pixel (expanded pixels - not colormap indeces)
|
||||
if( cmap )
|
||||
{
|
||||
bpp2 = (h.cmapentrysize + 7) / 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
bpp2 = bpp;
|
||||
}
|
||||
|
||||
// For colormaped images, the RGB/RGBA image data may use more memory
|
||||
// than the stored pixel data
|
||||
pixsize2 = h.width * h.height * bpp2;
|
||||
|
||||
// Allocate memory for pixel data
|
||||
pix = (unsigned char *) malloc( pixsize2 );
|
||||
if( pix == NULL )
|
||||
{
|
||||
if( cmap )
|
||||
{
|
||||
free( cmap );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Read pixel data from file
|
||||
if( h.imagetype >= _TGA_IMAGETYPE_CMAP_RLE )
|
||||
{
|
||||
ReadTGA_RLE( pix, pixsize, bpp, s );
|
||||
}
|
||||
else
|
||||
{
|
||||
_glfwReadStream( s, pix, pixsize );
|
||||
}
|
||||
|
||||
// If the image origin is not what we want, re-arrange the pixels
|
||||
switch( h._origin )
|
||||
{
|
||||
default:
|
||||
case _TGA_ORIGIN_UL:
|
||||
swapx = 0;
|
||||
swapy = 1;
|
||||
break;
|
||||
|
||||
case _TGA_ORIGIN_BL:
|
||||
swapx = 0;
|
||||
swapy = 0;
|
||||
break;
|
||||
|
||||
case _TGA_ORIGIN_UR:
|
||||
swapx = 1;
|
||||
swapy = 1;
|
||||
break;
|
||||
|
||||
case _TGA_ORIGIN_BR:
|
||||
swapx = 1;
|
||||
swapy = 0;
|
||||
break;
|
||||
}
|
||||
if( (swapy && !(flags & GLFW_ORIGIN_UL_BIT)) ||
|
||||
(!swapy && (flags & GLFW_ORIGIN_UL_BIT)) )
|
||||
{
|
||||
src = pix;
|
||||
dst = &pix[ (h.height-1)*h.width*bpp ];
|
||||
for( n = 0; n < h.height/2; n ++ )
|
||||
{
|
||||
for( m = 0; m < h.width ; m ++ )
|
||||
{
|
||||
for( k = 0; k < bpp; k ++ )
|
||||
{
|
||||
tmp = *src;
|
||||
*src ++ = *dst;
|
||||
*dst ++ = tmp;
|
||||
}
|
||||
}
|
||||
dst -= 2*h.width*bpp;
|
||||
}
|
||||
}
|
||||
if( swapx )
|
||||
{
|
||||
src = pix;
|
||||
dst = &pix[ (h.width-1)*bpp ];
|
||||
for( n = 0; n < h.height; n ++ )
|
||||
{
|
||||
for( m = 0; m < h.width/2 ; m ++ )
|
||||
{
|
||||
for( k = 0; k < bpp; k ++ )
|
||||
{
|
||||
tmp = *src;
|
||||
*src ++ = *dst;
|
||||
*dst ++ = tmp;
|
||||
}
|
||||
dst -= 2*bpp;
|
||||
}
|
||||
src += ((h.width+1)/2)*bpp;
|
||||
dst += ((3*h.width+1)/2)*bpp;
|
||||
}
|
||||
}
|
||||
|
||||
// Convert BGR/BGRA to RGB/RGBA, and optionally colormap indeces to
|
||||
// RGB/RGBA values
|
||||
if( cmap )
|
||||
{
|
||||
// Convert colormap pixel format (BGR -> RGB or BGRA -> RGBA)
|
||||
if( bpp2 == 3 || bpp2 == 4 )
|
||||
{
|
||||
for( n = 0; n < h.cmaplen; n ++ )
|
||||
{
|
||||
tmp = cmap[ n*bpp2 ];
|
||||
cmap[ n*bpp2 ] = cmap[ n*bpp2 + 2 ];
|
||||
cmap[ n*bpp2 + 2 ] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// Convert pixel data to RGB/RGBA data
|
||||
for( m = h.width * h.height - 1; m >= 0; m -- )
|
||||
{
|
||||
n = pix[ m ];
|
||||
for( k = 0; k < bpp2; k ++ )
|
||||
{
|
||||
pix[ m*bpp2 + k ] = cmap[ n*bpp2 + k ];
|
||||
}
|
||||
}
|
||||
|
||||
// Free memory for colormap (it's not needed anymore)
|
||||
free( cmap );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Convert image pixel format (BGR -> RGB or BGRA -> RGBA)
|
||||
if( bpp2 == 3 || bpp2 == 4 )
|
||||
{
|
||||
src = pix;
|
||||
dst = &pix[ 2 ];
|
||||
for( n = 0; n < h.height * h.width; n ++ )
|
||||
{
|
||||
tmp = *src;
|
||||
*src = *dst;
|
||||
*dst = tmp;
|
||||
src += bpp2;
|
||||
dst += bpp2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fill out GLFWimage struct (the Format field will be set by
|
||||
// glfwReadImage)
|
||||
img->Width = h.width;
|
||||
img->Height = h.height;
|
||||
img->BytesPerPixel = bpp2;
|
||||
img->Data = pix;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
341
ogl_editor/external/glfw/lib/thread.c
vendored
Normal file
341
ogl_editor/external/glfw/lib/thread.c
vendored
Normal file
@ -0,0 +1,341 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Find pointer to thread with a matching ID
|
||||
//========================================================================
|
||||
|
||||
_GLFWthread * _glfwGetThreadPointer( int ID )
|
||||
{
|
||||
_GLFWthread *t;
|
||||
|
||||
for( t = &_glfwThrd.First; t != NULL; t = t->Next )
|
||||
{
|
||||
if( t->ID == ID )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Append thread to thread list
|
||||
//========================================================================
|
||||
|
||||
void _glfwAppendThread( _GLFWthread * t )
|
||||
{
|
||||
_GLFWthread *t_tmp;
|
||||
|
||||
t_tmp = &_glfwThrd.First;
|
||||
while( t_tmp->Next != NULL )
|
||||
{
|
||||
t_tmp = t_tmp->Next;
|
||||
}
|
||||
t_tmp->Next = t;
|
||||
t->Previous = t_tmp;
|
||||
t->Next = NULL;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Remove thread from thread list
|
||||
//========================================================================
|
||||
|
||||
void _glfwRemoveThread( _GLFWthread * t )
|
||||
{
|
||||
if( t->Previous != NULL )
|
||||
{
|
||||
t->Previous->Next = t->Next;
|
||||
}
|
||||
if( t->Next != NULL )
|
||||
{
|
||||
t->Next->Previous = t->Previous;
|
||||
}
|
||||
free( (void *) t );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Create a new thread
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI GLFWthread GLFWAPIENTRY glfwCreateThread( GLFWthreadfun fun,
|
||||
void *arg )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Return the GLFW thread ID
|
||||
return _glfwPlatformCreateThread( fun, arg );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT
|
||||
// BE USED EXCEPT IN EXTREME SITUATIONS!
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwDestroyThread( GLFWthread ID )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Is it a valid thread? (killing the main thread is not allowed)
|
||||
if( ID < 1 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformDestroyThread( ID );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Wait for a thread to die
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwWaitThread( GLFWthread ID, int waitmode )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
// Is it a valid thread? (waiting for the main thread is not allowed)
|
||||
if( ID < 1 )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
return _glfwPlatformWaitThread( ID, waitmode );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return the thread ID for the current thread
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI GLFWthread GLFWAPIENTRY glfwGetThreadID( void )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetThreadID();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Create a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI GLFWmutex GLFWAPIENTRY glfwCreateMutex( void )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return (GLFWmutex) 0;
|
||||
}
|
||||
|
||||
return _glfwPlatformCreateMutex();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Destroy a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwDestroyMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Initialized & valid mutex (no real way of assuring this)?
|
||||
if( !_glfwInitialized || !mutex )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformDestroyMutex( mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Request access to a mutex
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwLockMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Initialized & valid mutex (no real way of assuring this)?
|
||||
if( !_glfwInitialized && !mutex )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformLockMutex( mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Release a mutex
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwUnlockMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Initialized & valid mutex (no real way of assuring this)?
|
||||
if( !_glfwInitialized && !mutex )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformUnlockMutex( mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Create a new condition variable object
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI GLFWcond GLFWAPIENTRY glfwCreateCond( void )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return (GLFWcond) 0;
|
||||
}
|
||||
|
||||
return _glfwPlatformCreateCond();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Destroy a condition variable object
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwDestroyCond( GLFWcond cond )
|
||||
{
|
||||
// Initialized & valid condition variable?
|
||||
if( !_glfwInitialized || !cond )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformDestroyCond( cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Wait for a condition to be raised
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwWaitCond( GLFWcond cond, GLFWmutex mutex,
|
||||
double timeout )
|
||||
{
|
||||
// Initialized & valid condition variable and mutex?
|
||||
if( !_glfwInitialized || !cond || !mutex )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformWaitCond( cond, mutex, timeout );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Signal a condition to one waiting thread
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSignalCond( GLFWcond cond )
|
||||
{
|
||||
// Initialized & valid condition variable?
|
||||
if( !_glfwInitialized || !cond )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformSignalCond( cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Broadcast a condition to all waiting threads
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwBroadcastCond( GLFWcond cond )
|
||||
{
|
||||
// Initialized & valid condition variable?
|
||||
if( !_glfwInitialized || !cond )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformBroadcastCond( cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return the number of processors in the system. This information can be
|
||||
// useful for determining the optimal number of threads to use for
|
||||
// performing a certain task.
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI int GLFWAPIENTRY glfwGetNumberOfProcessors( void )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetNumberOfProcessors();
|
||||
}
|
||||
|
||||
84
ogl_editor/external/glfw/lib/time.c
vendored
Normal file
84
ogl_editor/external/glfw/lib/time.c
vendored
Normal file
@ -0,0 +1,84 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Any
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Return timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI double GLFWAPIENTRY glfwGetTime( void )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
return _glfwPlatformGetTime();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSetTime( double time )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformSetTime( time );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Put a thread to sleep for a specified amount of time
|
||||
//========================================================================
|
||||
|
||||
GLFWAPI void GLFWAPIENTRY glfwSleep( double time )
|
||||
{
|
||||
// Is GLFW initialized?
|
||||
if( !_glfwInitialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_glfwPlatformSleep( time );
|
||||
}
|
||||
|
||||
265
ogl_editor/external/glfw/lib/win32/Makefile.win32.cross-mgw
vendored
Normal file
265
ogl_editor/external/glfw/lib/win32/Makefile.win32.cross-mgw
vendored
Normal file
@ -0,0 +1,265 @@
|
||||
##########################################################################
|
||||
# Makefile for GLFW on Windows using MinGW32.
|
||||
#-------------------------------------------------------------------------
|
||||
# To compile GLFW using this makefile, run:
|
||||
# make -f Makefile.win32.mgw
|
||||
##########################################################################
|
||||
PREFIX ?= /usr/i586-mingw32msvc
|
||||
TARGET ?= i586-mingw32msvc-
|
||||
|
||||
##########################################################################
|
||||
# GLFW version
|
||||
##########################################################################
|
||||
VERMAJOR = 2
|
||||
VERMINOR = 7
|
||||
|
||||
##########################################################################
|
||||
# Compiler settings
|
||||
##########################################################################
|
||||
CC = gcc
|
||||
CFLAGS = -c -I. -I.. -Wall -O2
|
||||
CFLAGS_DLL = $(CFLAGS) -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM
|
||||
|
||||
HEADERS = ../../include/GL/glfw.h ../internal.h platform.h
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
# Static library
|
||||
MKLIB = ar
|
||||
LIBFLAGS = -rcs
|
||||
|
||||
# DLL
|
||||
LINKFLAGS = -s -Wl,--major-image-version,$(VERMAJOR),--minor-image-version,$(VERMINOR)
|
||||
LINKLIBS = -lopengl32 -lwinmm -lgdi32
|
||||
|
||||
DLLTOOL = dlltool
|
||||
|
||||
SED = sed
|
||||
INSTALL = install
|
||||
|
||||
##########################################################################
|
||||
# Object files for static library
|
||||
##########################################################################
|
||||
OBJS = \
|
||||
enable.o \
|
||||
fullscreen.o \
|
||||
glext.o \
|
||||
image.o \
|
||||
init.o \
|
||||
input.o \
|
||||
joystick.o \
|
||||
stream.o \
|
||||
tga.o \
|
||||
thread.o \
|
||||
time.o \
|
||||
window.o \
|
||||
win32_enable.o \
|
||||
win32_fullscreen.o \
|
||||
win32_glext.o \
|
||||
win32_init.o \
|
||||
win32_joystick.o \
|
||||
win32_thread.o \
|
||||
win32_time.o \
|
||||
win32_window.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for dynamic library
|
||||
##########################################################################
|
||||
DLLOBJS = \
|
||||
enable_dll.o \
|
||||
fullscreen_dll.o \
|
||||
glext_dll.o \
|
||||
image_dll.o \
|
||||
init_dll.o \
|
||||
input_dll.o \
|
||||
joystick_dll.o \
|
||||
stream_dll.o \
|
||||
tga_dll.o \
|
||||
thread_dll.o \
|
||||
time_dll.o \
|
||||
window_dll.o \
|
||||
win32_dllmain_dll.o \
|
||||
win32_enable_dll.o \
|
||||
win32_fullscreen_dll.o \
|
||||
win32_glext_dll.o \
|
||||
win32_init_dll.o \
|
||||
win32_joystick_dll.o \
|
||||
win32_thread_dll.o \
|
||||
win32_time_dll.o \
|
||||
win32_window_dll.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Default: Build static and dynamic versions of GLFW
|
||||
##########################################################################
|
||||
all: libglfw.a glfw.dll
|
||||
|
||||
##########################################################################
|
||||
# Install GLFW header and static library
|
||||
##########################################################################
|
||||
install: glfw.dll libglfw.a libglfw.pc
|
||||
$(INSTALL) -d $(PREFIX)/bin
|
||||
$(INSTALL) -c glfw.dll $(PREFIX)/bin/glfw.dll
|
||||
$(INSTALL) -d $(PREFIX)/lib
|
||||
$(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a
|
||||
$(INSTALL) -d $(PREFIX)/include/GL
|
||||
$(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h
|
||||
$(INSTALL) -d $(PREFIX)/lib/pkgconfig
|
||||
$(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc
|
||||
|
||||
##########################################################################
|
||||
# Clean up generated files
|
||||
##########################################################################
|
||||
clean:
|
||||
rm -f $(OBJS) $(DLLOBJS)
|
||||
rm -f libglfw.a libglfwdll.a glfw.dll libglfw.pc
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
libglfw.a: $(OBJS)
|
||||
$(TARGET)$(MKLIB) $(LIBFLAGS) $@ $(OBJS) $(SYSOBJS)
|
||||
|
||||
##########################################################################
|
||||
# Rules for building dynamic library
|
||||
##########################################################################
|
||||
glfw.dll: $(DLLOBJS)
|
||||
$(TARGET)$(CC) -shared -o $@ -Wl,--output-def,libglfwdll.def $(DLLOBJS) $(LINKLIBS)
|
||||
$(TARGET)$(CC) -shared -o $@ -Wl,--kill-at $(DLLOBJS) $(LINKFLAGS) $(LINKLIBS)
|
||||
$(TARGET)$(DLLTOOL) --kill-at --output-lib libglfwdll.a --dllname $@ --def libglfwdll.def
|
||||
|
||||
libglfw.pc: libglfw.pc.in
|
||||
$(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc
|
||||
|
||||
##########################################################################
|
||||
# Rules for building static library object files
|
||||
##########################################################################
|
||||
enable.o: ../enable.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../enable.c
|
||||
|
||||
fullscreen.o: ../fullscreen.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../fullscreen.c
|
||||
|
||||
glext.o: ../glext.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../glext.c
|
||||
|
||||
image.o: ../image.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../image.c
|
||||
|
||||
init.o: ../init.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../init.c
|
||||
|
||||
input.o: ../input.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../input.c
|
||||
|
||||
joystick.o: ../joystick.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../joystick.c
|
||||
|
||||
stream.o: ../stream.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../stream.c
|
||||
|
||||
tga.o: ../tga.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../tga.c
|
||||
|
||||
thread.o: ../thread.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../thread.c
|
||||
|
||||
time.o: ../time.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../time.c
|
||||
|
||||
window.o: ../window.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ ../window.c
|
||||
|
||||
win32_enable.o: win32_enable.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_enable.c
|
||||
|
||||
win32_fullscreen.o: win32_fullscreen.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_fullscreen.c
|
||||
|
||||
win32_glext.o: win32_glext.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_glext.c
|
||||
|
||||
win32_init.o: win32_init.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_init.c
|
||||
|
||||
win32_joystick.o: win32_joystick.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_joystick.c
|
||||
|
||||
win32_thread.o: win32_thread.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_thread.c
|
||||
|
||||
win32_time.o: win32_time.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_time.c
|
||||
|
||||
win32_window.o: win32_window.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS) -o $@ win32_window.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building dynamic library object files
|
||||
##########################################################################
|
||||
enable_dll.o: ../enable.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../enable.c
|
||||
|
||||
fullscreen_dll.o: ../fullscreen.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../fullscreen.c
|
||||
|
||||
glext_dll.o: ../glext.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../glext.c
|
||||
|
||||
image_dll.o: ../image.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../image.c
|
||||
|
||||
init_dll.o: ../init.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../init.c
|
||||
|
||||
input_dll.o: ../input.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../input.c
|
||||
|
||||
joystick_dll.o: ../joystick.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../joystick.c
|
||||
|
||||
stream_dll.o: ../stream.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../stream.c
|
||||
|
||||
tga_dll.o: ../tga.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../tga.c
|
||||
|
||||
thread_dll.o: ../thread.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../thread.c
|
||||
|
||||
time_dll.o: ../time.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../time.c
|
||||
|
||||
window_dll.o: ../window.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../window.c
|
||||
|
||||
win32_dllmain_dll.o: win32_dllmain.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_dllmain.c
|
||||
|
||||
win32_enable_dll.o: win32_enable.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_enable.c
|
||||
|
||||
win32_fullscreen_dll.o: win32_fullscreen.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_fullscreen.c
|
||||
|
||||
win32_glext_dll.o: win32_glext.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_glext.c
|
||||
|
||||
win32_init_dll.o: win32_init.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_init.c
|
||||
|
||||
win32_joystick_dll.o: win32_joystick.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_joystick.c
|
||||
|
||||
win32_thread_dll.o: win32_thread.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_thread.c
|
||||
|
||||
win32_time_dll.o: win32_time.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_time.c
|
||||
|
||||
win32_window_dll.o: win32_window.c $(HEADERS)
|
||||
$(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_window.c
|
||||
|
||||
242
ogl_editor/external/glfw/lib/win32/Makefile.win32.lcc
vendored
Normal file
242
ogl_editor/external/glfw/lib/win32/Makefile.win32.lcc
vendored
Normal file
@ -0,0 +1,242 @@
|
||||
##########################################################################
|
||||
# Makefile for GLFW on Windows using LCC-Win32.
|
||||
#-------------------------------------------------------------------------
|
||||
# To compile GLFW using this makefile, run:
|
||||
# make -f Makefile.win32.lcc
|
||||
##########################################################################
|
||||
|
||||
##########################################################################
|
||||
# Default: Build static and dynamic versions of GLFW
|
||||
##########################################################################
|
||||
all: glfw.lib glfw.dll
|
||||
|
||||
|
||||
##########################################################################
|
||||
# GLFW version
|
||||
##########################################################################
|
||||
VERMAJOR = 2
|
||||
VERMINOR = 7
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Compiler settings
|
||||
##########################################################################
|
||||
CC = lc
|
||||
CFLAGS = -c -O -A -I. -I..
|
||||
CFLAGS_DLL = $(CFLAGS) -DGLFW_BUILD_DLL
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
# Static library
|
||||
MKLIB = lcclib
|
||||
LIBFLAGS =
|
||||
|
||||
# DLL
|
||||
LINK = lcclnk
|
||||
LINKFLAGS = -dll -nounderscores -version $(VERMAJOR).$(VERMINOR) -s
|
||||
LINKLIBS = opengl32.lib
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for static library
|
||||
##########################################################################
|
||||
OBJS = \
|
||||
enable.obj \
|
||||
fullscreen.obj \
|
||||
glext.obj \
|
||||
image.obj \
|
||||
init.obj \
|
||||
input.obj \
|
||||
joystick.obj \
|
||||
stream.obj \
|
||||
tga.obj \
|
||||
thread.obj \
|
||||
time.obj \
|
||||
window.obj \
|
||||
win32_enable.obj \
|
||||
win32_fullscreen.obj \
|
||||
win32_glext.obj \
|
||||
win32_init.obj \
|
||||
win32_joystick.obj \
|
||||
win32_thread.obj \
|
||||
win32_time.obj \
|
||||
win32_window.obj
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for dynamic library
|
||||
##########################################################################
|
||||
DLLOBJS = \
|
||||
enable_dll.obj \
|
||||
fullscreen_dll.obj \
|
||||
glext_dll.obj \
|
||||
image_dll.obj \
|
||||
init_dll.obj \
|
||||
input_dll.obj \
|
||||
joystick_dll.obj \
|
||||
stream_dll.obj \
|
||||
tga_dll.obj \
|
||||
thread_dll.obj \
|
||||
time_dll.obj \
|
||||
window_dll.obj \
|
||||
win32_dllmain_dll.obj \
|
||||
win32_enable_dll.obj \
|
||||
win32_fullscreen_dll.obj \
|
||||
win32_glext_dll.obj \
|
||||
win32_init_dll.obj \
|
||||
win32_joystick_dll.obj \
|
||||
win32_thread_dll.obj \
|
||||
win32_time_dll.obj \
|
||||
win32_window_dll.obj
|
||||
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
glfw.lib: $(OBJS)
|
||||
$(MKLIB) $(LIBFLAGS) /out:glfw.lib $(OBJS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building dynamic library
|
||||
##########################################################################
|
||||
glfw.dll: $(DLLOBJS)
|
||||
if exist glfw.lib rename glfw.lib glfw_lib.bak
|
||||
$(LINK) $(LINKFLAGS) -o $@ $(DLLOBJS) $(LINKLIBS)
|
||||
if exist glfwdll.lib del glfwdll.lib
|
||||
rename glfw.lib glfwdll.lib
|
||||
if exist glfw_lib.bak rename glfw_lib.bak glfw.lib
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building static library object files
|
||||
##########################################################################
|
||||
enable.obj: ..\\enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\enable.c
|
||||
|
||||
fullscreen.obj: ..\\fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\fullscreen.c
|
||||
|
||||
glext.obj: ..\\glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\glext.c
|
||||
|
||||
image.obj: ..\\image.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\image.c
|
||||
|
||||
init.obj: ..\\init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\init.c
|
||||
|
||||
input.obj: ..\\input.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\input.c
|
||||
|
||||
joystick.obj: ..\\joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\joystick.c
|
||||
|
||||
stream.obj: ..\\stream.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\stream.c
|
||||
|
||||
tga.obj: ..\\tga.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\tga.c
|
||||
|
||||
thread.obj: ..\\thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\thread.c
|
||||
|
||||
time.obj: ..\\time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\time.c
|
||||
|
||||
window.obj: ..\\window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ ..\\window.c
|
||||
|
||||
win32_enable.obj: win32_enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_enable.c
|
||||
|
||||
win32_fullscreen.obj: win32_fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_fullscreen.c
|
||||
|
||||
win32_glext.obj: win32_glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_glext.c
|
||||
|
||||
win32_init.obj: win32_init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_init.c
|
||||
|
||||
win32_joystick.obj: win32_joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_joystick.c
|
||||
|
||||
win32_thread.obj: win32_thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_thread.c
|
||||
|
||||
win32_time.obj: win32_time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_time.c
|
||||
|
||||
win32_window.obj: win32_window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) -Fo$@ win32_window.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building dynamic library object files
|
||||
##########################################################################
|
||||
enable_dll.obj: ..\\enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\enable.c
|
||||
|
||||
fullscreen_dll.obj: ..\\fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\fullscreen.c
|
||||
|
||||
glext_dll.obj: ..\\glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\glext.c
|
||||
|
||||
image_dll.obj: ..\\image.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\image.c
|
||||
|
||||
init_dll.obj: ..\\init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\init.c
|
||||
|
||||
input_dll.obj: ..\\input.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\input.c
|
||||
|
||||
joystick_dll.obj: ..\\joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\joystick.c
|
||||
|
||||
stream_dll.obj: ..\\stream.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\stream.c
|
||||
|
||||
tga_dll.obj: ..\\tga.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\tga.c
|
||||
|
||||
thread_dll.obj: ..\\thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\thread.c
|
||||
|
||||
time_dll.obj: ..\\time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\time.c
|
||||
|
||||
window_dll.obj: ..\\window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ ..\\window.c
|
||||
|
||||
win32_dllmain_dll.obj: win32_dllmain.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_dllmain.c
|
||||
|
||||
win32_enable_dll.obj: win32_enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_enable.c
|
||||
|
||||
win32_fullscreen_dll.obj: win32_fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_fullscreen.c
|
||||
|
||||
win32_glext_dll.obj: win32_glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_glext.c
|
||||
|
||||
win32_init_dll.obj: win32_init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_init.c
|
||||
|
||||
win32_joystick_dll.obj: win32_joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_joystick.c
|
||||
|
||||
win32_thread_dll.obj: win32_thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_thread.c
|
||||
|
||||
win32_time_dll.obj: win32_time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_time.c
|
||||
|
||||
win32_window_dll.obj: win32_window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -Fo$@ win32_window.c
|
||||
242
ogl_editor/external/glfw/lib/win32/Makefile.win32.mingw
vendored
Normal file
242
ogl_editor/external/glfw/lib/win32/Makefile.win32.mingw
vendored
Normal file
@ -0,0 +1,242 @@
|
||||
##########################################################################
|
||||
# Makefile for GLFW on Windows using MinGW32.
|
||||
#-------------------------------------------------------------------------
|
||||
# To compile GLFW using this makefile, run:
|
||||
# make -f Makefile.win32.mgw
|
||||
##########################################################################
|
||||
|
||||
##########################################################################
|
||||
# Default: Build static and dynamic versions of GLFW
|
||||
##########################################################################
|
||||
all: libglfw.a glfw.dll
|
||||
|
||||
|
||||
##########################################################################
|
||||
# GLFW version
|
||||
##########################################################################
|
||||
VERMAJOR = 2
|
||||
VERMINOR = 7
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Compiler settings
|
||||
##########################################################################
|
||||
CC = gcc
|
||||
CFLAGS = -c -I. -I.. -Wall -O2
|
||||
CFLAGS_DLL = $(CFLAGS) -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
# Static library
|
||||
MKLIB = ar
|
||||
LIBFLAGS = -rcs
|
||||
|
||||
# DLL
|
||||
LINKFLAGS = -s -Wl,--major-image-version,$(VERMAJOR),--minor-image-version,$(VERMINOR)
|
||||
LINKLIBS = -lopengl32 -lwinmm -lgdi32
|
||||
|
||||
DLLTOOL = dlltool
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for static library
|
||||
##########################################################################
|
||||
OBJS = \
|
||||
enable.o \
|
||||
fullscreen.o \
|
||||
glext.o \
|
||||
image.o \
|
||||
init.o \
|
||||
input.o \
|
||||
joystick.o \
|
||||
stream.o \
|
||||
tga.o \
|
||||
thread.o \
|
||||
time.o \
|
||||
window.o \
|
||||
win32_enable.o \
|
||||
win32_fullscreen.o \
|
||||
win32_glext.o \
|
||||
win32_init.o \
|
||||
win32_joystick.o \
|
||||
win32_thread.o \
|
||||
win32_time.o \
|
||||
win32_window.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for dynamic library
|
||||
##########################################################################
|
||||
DLLOBJS = \
|
||||
enable_dll.o \
|
||||
fullscreen_dll.o \
|
||||
glext_dll.o \
|
||||
image_dll.o \
|
||||
init_dll.o \
|
||||
input_dll.o \
|
||||
joystick_dll.o \
|
||||
stream_dll.o \
|
||||
tga_dll.o \
|
||||
thread_dll.o \
|
||||
time_dll.o \
|
||||
window_dll.o \
|
||||
win32_dllmain_dll.o \
|
||||
win32_enable_dll.o \
|
||||
win32_fullscreen_dll.o \
|
||||
win32_glext_dll.o \
|
||||
win32_init_dll.o \
|
||||
win32_joystick_dll.o \
|
||||
win32_thread_dll.o \
|
||||
win32_time_dll.o \
|
||||
win32_window_dll.o
|
||||
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
libglfw.a: $(OBJS)
|
||||
$(MKLIB) $(LIBFLAGS) $@ $(OBJS) $(SYSOBJS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building dynamic library
|
||||
##########################################################################
|
||||
glfw.dll: $(DLLOBJS)
|
||||
$(CC) -shared -o $@ -Wl,--output-def,libglfwdll.def $(DLLOBJS) $(LINKLIBS)
|
||||
$(CC) -shared -o $@ -Wl,--kill-at $(DLLOBJS) $(LINKFLAGS) $(LINKLIBS)
|
||||
$(DLLTOOL) --kill-at --output-lib libglfwdll.a --dllname $@ --def libglfwdll.def
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building static library object files
|
||||
##########################################################################
|
||||
enable.o: ../enable.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../enable.c
|
||||
|
||||
fullscreen.o: ../fullscreen.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../fullscreen.c
|
||||
|
||||
glext.o: ../glext.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../glext.c
|
||||
|
||||
image.o: ../image.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../image.c
|
||||
|
||||
init.o: ../init.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../init.c
|
||||
|
||||
input.o: ../input.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../input.c
|
||||
|
||||
joystick.o: ../joystick.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../joystick.c
|
||||
|
||||
stream.o: ../stream.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../stream.c
|
||||
|
||||
tga.o: ../tga.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../tga.c
|
||||
|
||||
thread.o: ../thread.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../thread.c
|
||||
|
||||
time.o: ../time.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../time.c
|
||||
|
||||
window.o: ../window.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ ../window.c
|
||||
|
||||
win32_enable.o: win32_enable.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_enable.c
|
||||
|
||||
win32_fullscreen.o: win32_fullscreen.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_fullscreen.c
|
||||
|
||||
win32_glext.o: win32_glext.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_glext.c
|
||||
|
||||
win32_init.o: win32_init.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_init.c
|
||||
|
||||
win32_joystick.o: win32_joystick.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_joystick.c
|
||||
|
||||
win32_thread.o: win32_thread.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_thread.c
|
||||
|
||||
win32_time.o: win32_time.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_time.c
|
||||
|
||||
win32_window.o: win32_window.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS) -o $@ win32_window.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building dynamic library object files
|
||||
##########################################################################
|
||||
enable_dll.o: ../enable.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../enable.c
|
||||
|
||||
fullscreen_dll.o: ../fullscreen.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../fullscreen.c
|
||||
|
||||
glext_dll.o: ../glext.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../glext.c
|
||||
|
||||
image_dll.o: ../image.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../image.c
|
||||
|
||||
init_dll.o: ../init.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../init.c
|
||||
|
||||
input_dll.o: ../input.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../input.c
|
||||
|
||||
joystick_dll.o: ../joystick.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../joystick.c
|
||||
|
||||
stream_dll.o: ../stream.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../stream.c
|
||||
|
||||
tga_dll.o: ../tga.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../tga.c
|
||||
|
||||
thread_dll.o: ../thread.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../thread.c
|
||||
|
||||
time_dll.o: ../time.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../time.c
|
||||
|
||||
window_dll.o: ../window.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../window.c
|
||||
|
||||
win32_dllmain_dll.o: win32_dllmain.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_dllmain.c
|
||||
|
||||
win32_enable_dll.o: win32_enable.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_enable.c
|
||||
|
||||
win32_fullscreen_dll.o: win32_fullscreen.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_fullscreen.c
|
||||
|
||||
win32_glext_dll.o: win32_glext.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_glext.c
|
||||
|
||||
win32_init_dll.o: win32_init.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_init.c
|
||||
|
||||
win32_joystick_dll.o: win32_joystick.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_joystick.c
|
||||
|
||||
win32_thread_dll.o: win32_thread.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_thread.c
|
||||
|
||||
win32_time_dll.o: win32_time.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_time.c
|
||||
|
||||
win32_window_dll.o: win32_window.c ../internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_window.c
|
||||
|
||||
273
ogl_editor/external/glfw/lib/win32/Makefile.win32.msys
vendored
Normal file
273
ogl_editor/external/glfw/lib/win32/Makefile.win32.msys
vendored
Normal file
@ -0,0 +1,273 @@
|
||||
##########################################################################
|
||||
# Makefile for GLFW on Windows using MSYS
|
||||
#-------------------------------------------------------------------------
|
||||
# To compile GLFW using this makefile, run:
|
||||
# make -f Makefile.win32.msys
|
||||
##########################################################################
|
||||
|
||||
PREFIX ?= /usr/local
|
||||
|
||||
##########################################################################
|
||||
# GLFW version
|
||||
##########################################################################
|
||||
VERMAJOR = 2
|
||||
VERMINOR = 7
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Compiler settings
|
||||
##########################################################################
|
||||
CC = gcc
|
||||
CFLAGS = -c -I. -I.. -Wall -mwin32 -O2
|
||||
CFLAGS_DLL = $(CFLAGS) -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM
|
||||
|
||||
HEADERS = ../../include/GL/glfw.h ../internal.h platform.h
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
# Static library
|
||||
MKLIB = ar
|
||||
LIBFLAGS = -rcs
|
||||
|
||||
# DLL
|
||||
LINKFLAGS = -shared -s -Wl,--kill-at,--major-image-version,$(VERMAJOR),--minor-image-version,$(VERMINOR)
|
||||
LINKLIBS = -lopengl32 -lwinmm -lgdi32
|
||||
|
||||
DLLTOOL = dlltool
|
||||
|
||||
SED = sed
|
||||
INSTALL = install
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for static library
|
||||
##########################################################################
|
||||
OBJS = \
|
||||
enable.o \
|
||||
fullscreen.o \
|
||||
glext.o \
|
||||
image.o \
|
||||
init.o \
|
||||
input.o \
|
||||
joystick.o \
|
||||
stream.o \
|
||||
tga.o \
|
||||
thread.o \
|
||||
time.o \
|
||||
window.o \
|
||||
win32_enable.o \
|
||||
win32_fullscreen.o \
|
||||
win32_glext.o \
|
||||
win32_init.o \
|
||||
win32_joystick.o \
|
||||
win32_thread.o \
|
||||
win32_time.o \
|
||||
win32_window.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for dynamic library
|
||||
##########################################################################
|
||||
DLLOBJS = \
|
||||
enable_dll.o \
|
||||
fullscreen_dll.o \
|
||||
glext_dll.o \
|
||||
image_dll.o \
|
||||
init_dll.o \
|
||||
input_dll.o \
|
||||
joystick_dll.o \
|
||||
stream_dll.o \
|
||||
tga_dll.o \
|
||||
thread_dll.o \
|
||||
time_dll.o \
|
||||
window_dll.o \
|
||||
win32_dllmain_dll.o \
|
||||
win32_enable_dll.o \
|
||||
win32_fullscreen_dll.o \
|
||||
win32_glext_dll.o \
|
||||
win32_init_dll.o \
|
||||
win32_joystick_dll.o \
|
||||
win32_thread_dll.o \
|
||||
win32_time_dll.o \
|
||||
win32_window_dll.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Default: Build static and dynamic versions of GLFW
|
||||
##########################################################################
|
||||
all: libglfw.a glfw.dll
|
||||
|
||||
##########################################################################
|
||||
# Install GLFW header and static library
|
||||
##########################################################################
|
||||
install: libglfw.a libglfw.pc
|
||||
$(INSTALL) -d $(PREFIX)/lib
|
||||
$(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a
|
||||
$(INSTALL) -d $(PREFIX)/include/GL
|
||||
$(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h
|
||||
$(INSTALL) -d $(PREFIX)/lib/pkgconfig
|
||||
$(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Clean up generated files
|
||||
##########################################################################
|
||||
clean:
|
||||
rm -f $(OBJS) $(DLLOBJS)
|
||||
rm -f libglfw.a glfw.dll libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building libglfw.pc
|
||||
##########################################################################
|
||||
libglfw.pc: libglfw.pc.in
|
||||
$(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
libglfw.a: $(OBJS)
|
||||
$(MKLIB) $(LIBFLAGS) libglfw.a $(OBJS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building dynamic library
|
||||
##########################################################################
|
||||
glfw.dll: $(DLLOBJS)
|
||||
$(CC) -shared -o $@ -Wl,--output-def,libglfwdll.def $(DLLOBJS) $(LINKLIBS)
|
||||
$(CC) -shared -o $@ -Wl,--kill-at $(DLLOBJS) $(LINKFLAGS) $(LINKLIBS)
|
||||
$(DLLTOOL) --kill-at --output-lib libglfwdll.a --dllname $@ --def libglfwdll.def
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building static library object files
|
||||
##########################################################################
|
||||
enable.o: ../enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../enable.c
|
||||
|
||||
fullscreen.o: ../fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../fullscreen.c
|
||||
|
||||
glext.o: ../glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../glext.c
|
||||
|
||||
image.o: ../image.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../image.c
|
||||
|
||||
init.o: ../init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../init.c
|
||||
|
||||
input.o: ../input.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../input.c
|
||||
|
||||
joystick.o: ../joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../joystick.c
|
||||
|
||||
stream.o: ../stream.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../stream.c
|
||||
|
||||
tga.o: ../tga.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../tga.c
|
||||
|
||||
thread.o: ../thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../thread.c
|
||||
|
||||
time.o: ../time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../time.c
|
||||
|
||||
window.o: ../window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../window.c
|
||||
|
||||
win32_enable.o: win32_enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_enable.c
|
||||
|
||||
win32_fullscreen.o: win32_fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_fullscreen.c
|
||||
|
||||
win32_glext.o: win32_glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_glext.c
|
||||
|
||||
win32_init.o: win32_init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_init.c
|
||||
|
||||
win32_joystick.o: win32_joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_joystick.c
|
||||
|
||||
win32_thread.o: win32_thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_thread.c
|
||||
|
||||
win32_time.o: win32_time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_time.c
|
||||
|
||||
win32_window.o: win32_window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ win32_window.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building dynamic library object files
|
||||
##########################################################################
|
||||
enable_dll.o: ../enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../enable.c
|
||||
|
||||
fullscreen_dll.o: ../fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../fullscreen.c
|
||||
|
||||
glext_dll.o: ../glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../glext.c
|
||||
|
||||
image_dll.o: ../image.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../image.c
|
||||
|
||||
init_dll.o: ../init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../init.c
|
||||
|
||||
input_dll.o: ../input.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../input.c
|
||||
|
||||
joystick_dll.o: ../joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../joystick.c
|
||||
|
||||
stream_dll.o: ../stream.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../stream.c
|
||||
|
||||
tga_dll.o: ../tga.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../tga.c
|
||||
|
||||
thread_dll.o: ../thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../thread.c
|
||||
|
||||
time_dll.o: ../time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../time.c
|
||||
|
||||
window_dll.o: ../window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ ../window.c
|
||||
|
||||
win32_dllmain_dll.o: win32_dllmain.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_dllmain.c
|
||||
|
||||
win32_enable_dll.o: win32_enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_enable.c
|
||||
|
||||
win32_fullscreen_dll.o: win32_fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_fullscreen.c
|
||||
|
||||
win32_glext_dll.o: win32_glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_glext.c
|
||||
|
||||
win32_init_dll.o: win32_init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_init.c
|
||||
|
||||
win32_joystick_dll.o: win32_joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_joystick.c
|
||||
|
||||
win32_thread_dll.o: win32_thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_thread.c
|
||||
|
||||
win32_time_dll.o: win32_time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_time.c
|
||||
|
||||
win32_window_dll.o: win32_window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS_DLL) -o $@ win32_window.c
|
||||
|
||||
238
ogl_editor/external/glfw/lib/win32/Makefile.win32.ow
vendored
Normal file
238
ogl_editor/external/glfw/lib/win32/Makefile.win32.ow
vendored
Normal file
@ -0,0 +1,238 @@
|
||||
##########################################################################
|
||||
# Makefile for GLFW on Windows using Open Watcom 1.0.
|
||||
#-------------------------------------------------------------------------
|
||||
# To compile GLFW using this makefile, run:
|
||||
# "wmake -ms -f Makefile.win32.ow" or "nmake -f Makefile.win32.ow"
|
||||
##########################################################################
|
||||
|
||||
##########################################################################
|
||||
# Default: Build static and dynamic versions of GLFW
|
||||
##########################################################################
|
||||
all: glfw.lib glfw.dll
|
||||
|
||||
|
||||
##########################################################################
|
||||
# GLFW version
|
||||
##########################################################################
|
||||
VERMAJOR = 2
|
||||
VERMINOR = 7
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Compiler settings
|
||||
##########################################################################
|
||||
CC = cl386
|
||||
CFLAGS = /nologo /c /O1sgiy /Gs /W3 /I. /I..
|
||||
CFLAGS_DLL = $(CFLAGS) /DGLFW_BUILD_DLL
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
# Static library
|
||||
MKLIB = lib386
|
||||
LIBFLAGS = /nologo
|
||||
|
||||
# DLL
|
||||
LINK = wlink
|
||||
LINKFLAGS = OPTION { quiet version=$(VERMAJOR).$(VERMINOR) } SYSTEM nt_dll initinstance terminstance
|
||||
LINKLIBS = opengl32.lib user32.lib
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for static library
|
||||
##########################################################################
|
||||
OBJS = \
|
||||
enable.obj \
|
||||
fullscreen.obj \
|
||||
glext.obj \
|
||||
image.obj \
|
||||
init.obj \
|
||||
input.obj \
|
||||
joystick.obj \
|
||||
stream.obj \
|
||||
tga.obj \
|
||||
thread.obj \
|
||||
time.obj \
|
||||
window.obj \
|
||||
win32_enable.obj \
|
||||
win32_fullscreen.obj \
|
||||
win32_glext.obj \
|
||||
win32_init.obj \
|
||||
win32_joystick.obj \
|
||||
win32_thread.obj \
|
||||
win32_time.obj \
|
||||
win32_window.obj
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files for dynamic library
|
||||
##########################################################################
|
||||
DLLOBJS = \
|
||||
enable_dll.obj \
|
||||
fullscreen_dll.obj \
|
||||
glext_dll.obj \
|
||||
image_dll.obj \
|
||||
init_dll.obj \
|
||||
input_dll.obj \
|
||||
joystick_dll.obj \
|
||||
stream_dll.obj \
|
||||
tga_dll.obj \
|
||||
thread_dll.obj \
|
||||
time_dll.obj \
|
||||
window_dll.obj \
|
||||
win32_dllmain_dll.obj \
|
||||
win32_enable_dll.obj \
|
||||
win32_fullscreen_dll.obj \
|
||||
win32_glext_dll.obj \
|
||||
win32_init_dll.obj \
|
||||
win32_joystick_dll.obj \
|
||||
win32_thread_dll.obj \
|
||||
win32_time_dll.obj \
|
||||
win32_window_dll.obj
|
||||
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
glfw.lib: $(OBJS)
|
||||
$(MKLIB) $(LIBFLAGS) /OUT:glfw.lib $(OBJS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building dynamic library
|
||||
##########################################################################
|
||||
glfw.dll: $(DLLOBJS)
|
||||
$(LINK) $(LINKFLAGS) NAME glfw.dll OPTION { modname='GLFW.DLL' implib=glfwdll.lib stack=1M START=__DLLstartw_ } REFERENCE __DLLstartw_ FILE { $(DLLOBJS) } LIBRARY { $(LINKLIBS) }
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building static library object files
|
||||
##########################################################################
|
||||
enable.obj: ..\\enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\enable.c
|
||||
|
||||
fullscreen.obj: ..\\fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\fullscreen.c
|
||||
|
||||
glext.obj: ..\\glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\glext.c
|
||||
|
||||
image.obj: ..\\image.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\image.c
|
||||
|
||||
init.obj: ..\\init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\init.c
|
||||
|
||||
input.obj: ..\\input.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\input.c
|
||||
|
||||
joystick.obj: ..\\joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\joystick.c
|
||||
|
||||
stream.obj: ..\\stream.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\stream.c
|
||||
|
||||
tga.obj: ..\\tga.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\tga.c
|
||||
|
||||
thread.obj: ..\\thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\thread.c
|
||||
|
||||
time.obj: ..\\time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\time.c
|
||||
|
||||
window.obj: ..\\window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ ..\\window.c
|
||||
|
||||
win32_enable.obj: win32_enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_enable.c
|
||||
|
||||
win32_fullscreen.obj: win32_fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_fullscreen.c
|
||||
|
||||
win32_glext.obj: win32_glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_glext.c
|
||||
|
||||
win32_init.obj: win32_init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_init.c
|
||||
|
||||
win32_joystick.obj: win32_joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_joystick.c
|
||||
|
||||
win32_thread.obj: win32_thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_thread.c
|
||||
|
||||
win32_time.obj: win32_time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_time.c
|
||||
|
||||
win32_window.obj: win32_window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS) /Fo$@ win32_window.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building dynamic library object files
|
||||
##########################################################################
|
||||
enable_dll.obj: ..\\enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\enable.c
|
||||
|
||||
fullscreen_dll.obj: ..\\fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\fullscreen.c
|
||||
|
||||
glext_dll.obj: ..\\glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\glext.c
|
||||
|
||||
image_dll.obj: ..\\image.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\image.c
|
||||
|
||||
init_dll.obj: ..\\init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\init.c
|
||||
|
||||
input_dll.obj: ..\\input.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\input.c
|
||||
|
||||
joystick_dll.obj: ..\\joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\joystick.c
|
||||
|
||||
stream_dll.obj: ..\\stream.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\stream.c
|
||||
|
||||
tga_dll.obj: ..\\tga.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\tga.c
|
||||
|
||||
thread_dll.obj: ..\\thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\thread.c
|
||||
|
||||
time_dll.obj: ..\\time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\time.c
|
||||
|
||||
window_dll.obj: ..\\window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ ..\\window.c
|
||||
|
||||
win32_dllmain_dll.obj: win32_dllmain.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_dllmain.c
|
||||
|
||||
win32_enable_dll.obj: win32_enable.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_enable.c
|
||||
|
||||
win32_fullscreen_dll.obj: win32_fullscreen.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_fullscreen.c
|
||||
|
||||
win32_glext_dll.obj: win32_glext.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_glext.c
|
||||
|
||||
win32_init_dll.obj: win32_init.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_init.c
|
||||
|
||||
win32_joystick_dll.obj: win32_joystick.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_joystick.c
|
||||
|
||||
win32_thread_dll.obj: win32_thread.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_thread.c
|
||||
|
||||
win32_time_dll.obj: win32_time.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_time.c
|
||||
|
||||
win32_window_dll.obj: win32_window.c ..\\internal.h platform.h
|
||||
$(CC) $(CFLAGS_DLL) /Fo$@ win32_window.c
|
||||
67
ogl_editor/external/glfw/lib/win32/glfwdll.def
vendored
Normal file
67
ogl_editor/external/glfw/lib/win32/glfwdll.def
vendored
Normal file
@ -0,0 +1,67 @@
|
||||
LIBRARY GLFW.DLL
|
||||
|
||||
EXPORTS
|
||||
glfwBroadcastCond
|
||||
glfwCloseWindow
|
||||
glfwCreateCond
|
||||
glfwCreateMutex
|
||||
glfwCreateThread
|
||||
glfwDestroyCond
|
||||
glfwDestroyMutex
|
||||
glfwDestroyThread
|
||||
glfwDisable
|
||||
glfwEnable
|
||||
glfwExtensionSupported
|
||||
glfwFreeImage
|
||||
glfwGetDesktopMode
|
||||
glfwGetGLVersion
|
||||
glfwGetJoystickButtons
|
||||
glfwGetJoystickParam
|
||||
glfwGetJoystickPos
|
||||
glfwGetKey
|
||||
glfwGetMouseButton
|
||||
glfwGetMousePos
|
||||
glfwGetMouseWheel
|
||||
glfwGetNumberOfProcessors
|
||||
glfwGetProcAddress
|
||||
glfwGetThreadID
|
||||
glfwGetTime
|
||||
glfwGetVersion
|
||||
glfwGetVideoModes
|
||||
glfwGetWindowParam
|
||||
glfwGetWindowSize
|
||||
glfwIconifyWindow
|
||||
glfwInit
|
||||
glfwLoadMemoryTexture2D
|
||||
glfwLoadTexture2D
|
||||
glfwLoadTextureImage2D
|
||||
glfwLockMutex
|
||||
glfwOpenWindow
|
||||
glfwOpenWindowHint
|
||||
glfwPollEvents
|
||||
glfwReadImage
|
||||
glfwReadMemoryImage
|
||||
glfwRestoreWindow
|
||||
glfwSetCharCallback
|
||||
glfwSetKeyCallback
|
||||
glfwSetMouseButtonCallback
|
||||
glfwSetMousePos
|
||||
glfwSetMousePosCallback
|
||||
glfwSetMouseWheel
|
||||
glfwSetMouseWheelCallback
|
||||
glfwSetTime
|
||||
glfwSetWindowCloseCallback
|
||||
glfwSetWindowRefreshCallback
|
||||
glfwSetWindowPos
|
||||
glfwSetWindowSize
|
||||
glfwSetWindowSizeCallback
|
||||
glfwSetWindowTitle
|
||||
glfwSignalCond
|
||||
glfwSleep
|
||||
glfwSwapBuffers
|
||||
glfwSwapInterval
|
||||
glfwTerminate
|
||||
glfwUnlockMutex
|
||||
glfwWaitCond
|
||||
glfwWaitEvents
|
||||
glfwWaitThread
|
||||
11
ogl_editor/external/glfw/lib/win32/libglfw.pc.in
vendored
Normal file
11
ogl_editor/external/glfw/lib/win32/libglfw.pc.in
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
prefix=@PREFIX@
|
||||
exec_prefix=@PREFIX@
|
||||
libdir=@PREFIX@/lib
|
||||
includedir=@PREFIX@/include
|
||||
|
||||
Name: GLFW
|
||||
Description: A portable framework for OpenGL development
|
||||
Version: 2.7
|
||||
URL: http://www.glfw.org/
|
||||
Libs: -L${libdir} -lglfw -lglu32 -lopengl32 -lm -s -mwindows -e _mainCRTStartup
|
||||
Cflags: -I${includedir} -mwin32
|
||||
558
ogl_editor/external/glfw/lib/win32/platform.h
vendored
Normal file
558
ogl_editor/external/glfw/lib/win32/platform.h
vendored
Normal file
@ -0,0 +1,558 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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_EXT_swap_control
|
||||
|
||||
/* Entry points */
|
||||
typedef int (APIENTRY * PFNWGLSWAPINTERVALEXTPROC) (int);
|
||||
|
||||
#endif /*WGL_EXT_swap_control*/
|
||||
|
||||
#ifndef WGL_ARB_extensions_string
|
||||
|
||||
/* Entry points */
|
||||
typedef const char *(APIENTRY * PFNWGLGETEXTENSIONSSTRINGARBPROC)( HDC );
|
||||
|
||||
#endif /*WGL_ARB_extensions_string*/
|
||||
|
||||
#ifndef WGL_EXT_extension_string
|
||||
|
||||
/* Entry points */
|
||||
typedef const char *(APIENTRY * PFNWGLGETEXTENSIONSSTRINGEXTPROC)( void );
|
||||
|
||||
#endif /*WGL_EXT_extension_string*/
|
||||
|
||||
#ifndef WGL_ARB_pixel_format
|
||||
|
||||
/* Entry points */
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC, int, int, UINT, const int *, int *);
|
||||
|
||||
/* 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
|
||||
|
||||
/* Entry points */
|
||||
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*/
|
||||
|
||||
|
||||
#ifndef GL_VERSION_3_0
|
||||
|
||||
typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint);
|
||||
|
||||
#endif /*GL_VERSION_3_0*/
|
||||
|
||||
|
||||
//========================================================================
|
||||
// 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;
|
||||
|
||||
PFNGLGETSTRINGIPROC GetStringi;
|
||||
|
||||
|
||||
// ========= 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)
|
||||
PFNWGLSWAPINTERVALEXTPROC SwapIntervalEXT;
|
||||
PFNWGLGETPIXELFORMATATTRIBIVARBPROC GetPixelFormatAttribivARB;
|
||||
PFNWGLGETEXTENSIONSSTRINGEXTPROC GetExtensionsStringEXT;
|
||||
PFNWGLGETEXTENSIONSSTRINGARBPROC 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;
|
||||
GLboolean has_WGL_ARB_create_context_profile;
|
||||
|
||||
// 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;
|
||||
|
||||
// Initial desktop mode
|
||||
GLFWvidmode desktopMode;
|
||||
|
||||
// ========= 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_
|
||||
49
ogl_editor/external/glfw/lib/win32/win32_dllmain.c
vendored
Normal file
49
ogl_editor/external/glfw/lib/win32/win32_dllmain.c
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
#if defined(GLFW_BUILD_DLL)
|
||||
|
||||
//========================================================================
|
||||
// GLFW DLL entry point
|
||||
//========================================================================
|
||||
|
||||
BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, LPVOID reserved )
|
||||
{
|
||||
// NOTE: Some compilers complains about instance and x never being used -
|
||||
// never mind that (we don't want to use them)!
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif // GLFW_BUILD_DLL
|
||||
|
||||
155
ogl_editor/external/glfw/lib/win32/win32_enable.c
vendored
Normal file
155
ogl_editor/external/glfw/lib/win32/win32_enable.c
vendored
Normal file
@ -0,0 +1,155 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Low level keyboard hook (system callback) function
|
||||
// Used to disable system keys under Windows NT
|
||||
//========================================================================
|
||||
|
||||
static LRESULT CALLBACK keyboardHook( int nCode, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
BOOL syskeys = FALSE;
|
||||
PKBDLLHOOKSTRUCT p;
|
||||
|
||||
// We are only looking for keyboard events - interpret lParam as a
|
||||
// pointer to a KBDLLHOOKSTRUCT
|
||||
p = (PKBDLLHOOKSTRUCT) lParam;
|
||||
|
||||
if( nCode == HC_ACTION )
|
||||
{
|
||||
// We have a keyboard event
|
||||
|
||||
switch( wParam )
|
||||
{
|
||||
case WM_KEYDOWN:
|
||||
case WM_SYSKEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_SYSKEYUP:
|
||||
// Detect: ALT+TAB, ALT+ESC, ALT+F4, CTRL+ESC,
|
||||
// LWIN, RWIN, APPS (mysterious menu key)
|
||||
syskeys = ( p->vkCode == VK_TAB &&
|
||||
p->flags & LLKHF_ALTDOWN ) ||
|
||||
( p->vkCode == VK_ESCAPE &&
|
||||
p->flags & LLKHF_ALTDOWN ) ||
|
||||
( p->vkCode == VK_F4 &&
|
||||
p->flags & LLKHF_ALTDOWN ) ||
|
||||
( p->vkCode == VK_ESCAPE &&
|
||||
(GetKeyState(VK_CONTROL) & 0x8000)) ||
|
||||
p->vkCode == VK_LWIN ||
|
||||
p->vkCode == VK_RWIN ||
|
||||
p->vkCode == VK_APPS;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Was it a system key combination (e.g. ALT+TAB)?
|
||||
if( syskeys )
|
||||
{
|
||||
// Pass the key event to our window message loop
|
||||
if( _glfwWin.opened )
|
||||
{
|
||||
PostMessage( _glfwWin.window, (UINT) wParam, p->vkCode, 0 );
|
||||
}
|
||||
|
||||
// We've taken care of it - don't let the system know about this
|
||||
// key event
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// It's a harmless key press, let the system deal with it
|
||||
return CallNextHookEx( _glfwWin.keyboardHook, nCode, wParam, lParam );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Enable system keys
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformEnableSystemKeys( void )
|
||||
{
|
||||
BOOL dummy;
|
||||
|
||||
// Use different methods depending on operating system version
|
||||
if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 )
|
||||
{
|
||||
if( _glfwWin.keyboardHook != NULL )
|
||||
{
|
||||
UnhookWindowsHookEx( _glfwWin.keyboardHook );
|
||||
_glfwWin.keyboardHook = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
(void) SystemParametersInfo( SPI_SETSCREENSAVERRUNNING, FALSE, &dummy, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable system keys
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDisableSystemKeys( void )
|
||||
{
|
||||
BOOL dummy;
|
||||
|
||||
// Use different methods depending on operating system version
|
||||
if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 )
|
||||
{
|
||||
// Under Windows NT, install a low level keyboard hook
|
||||
_glfwWin.keyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL,
|
||||
keyboardHook,
|
||||
_glfwLibrary.instance,
|
||||
0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Under Windows 95/98/ME, fool Windows that a screensaver
|
||||
// is running => prevents ALT+TAB, CTRL+ESC and CTRL+ALT+DEL
|
||||
(void) SystemParametersInfo( SPI_SETSCREENSAVERRUNNING, TRUE, &dummy, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
320
ogl_editor/external/glfw/lib/win32/win32_fullscreen.c
vendored
Normal file
320
ogl_editor/external/glfw/lib/win32/win32_fullscreen.c
vendored
Normal file
@ -0,0 +1,320 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Convert BPP to RGB bits based on "best guess"
|
||||
//========================================================================
|
||||
|
||||
static void bpp2rgb( int bpp, int *r, int *g, int *b )
|
||||
{
|
||||
int delta;
|
||||
|
||||
// We assume that by 32 they really meant 24
|
||||
if( bpp == 32 )
|
||||
{
|
||||
bpp = 24;
|
||||
}
|
||||
|
||||
// Convert "bits per pixel" to red, green & blue sizes
|
||||
|
||||
*r = *g = *b = bpp / 3;
|
||||
delta = bpp - (*r * 3);
|
||||
if( delta >= 1 )
|
||||
{
|
||||
*g = *g + 1;
|
||||
}
|
||||
if( delta == 2 )
|
||||
{
|
||||
*r = *r + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return closest video mode by dimensions, refresh rate and bits per pixel
|
||||
//========================================================================
|
||||
|
||||
int _glfwGetClosestVideoModeBPP( int *w, int *h, int *bpp, int *refresh )
|
||||
{
|
||||
int mode, bestmode, match, bestmatch, rr, bestrr, success;
|
||||
DEVMODE dm;
|
||||
|
||||
// Find best match
|
||||
bestmatch = 0x7fffffff;
|
||||
bestrr = 0x7fffffff;
|
||||
mode = bestmode = 0;
|
||||
do
|
||||
{
|
||||
dm.dmSize = sizeof( DEVMODE );
|
||||
success = EnumDisplaySettings( NULL, mode, &dm );
|
||||
if( success )
|
||||
{
|
||||
match = dm.dmBitsPerPel - *bpp;
|
||||
if( match < 0 ) match = -match;
|
||||
match = ( match << 25 ) |
|
||||
( (dm.dmPelsWidth - *w) *
|
||||
(dm.dmPelsWidth - *w) +
|
||||
(dm.dmPelsHeight - *h) *
|
||||
(dm.dmPelsHeight - *h) );
|
||||
if( match < bestmatch )
|
||||
{
|
||||
bestmatch = match;
|
||||
bestmode = mode;
|
||||
bestrr = (dm.dmDisplayFrequency - *refresh) *
|
||||
(dm.dmDisplayFrequency - *refresh);
|
||||
}
|
||||
else if( match == bestmatch && *refresh > 0 )
|
||||
{
|
||||
rr = (dm.dmDisplayFrequency - *refresh) *
|
||||
(dm.dmDisplayFrequency - *refresh);
|
||||
if( rr < bestrr )
|
||||
{
|
||||
bestmatch = match;
|
||||
bestmode = mode;
|
||||
bestrr = rr;
|
||||
}
|
||||
}
|
||||
}
|
||||
mode ++;
|
||||
}
|
||||
while( success );
|
||||
|
||||
// Get the parameters for the best matching display mode
|
||||
dm.dmSize = sizeof( DEVMODE );
|
||||
(void) EnumDisplaySettings( NULL, bestmode, &dm );
|
||||
|
||||
// Fill out actual width and height
|
||||
*w = dm.dmPelsWidth;
|
||||
*h = dm.dmPelsHeight;
|
||||
|
||||
// Return bits per pixel
|
||||
*bpp = dm.dmBitsPerPel;
|
||||
|
||||
// Return vertical refresh rate
|
||||
*refresh = dm.dmDisplayFrequency;
|
||||
|
||||
return bestmode;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return closest video mode by dimensions, refresh rate and channel sizes
|
||||
//========================================================================
|
||||
|
||||
static int getClosestVideoMode( int *w, int *h,
|
||||
int *r, int *g, int *b,
|
||||
int *refresh )
|
||||
{
|
||||
int bpp, bestmode;
|
||||
|
||||
// Colorbits = sum of red/green/blue bits
|
||||
bpp = *r + *g + *b;
|
||||
|
||||
// If colorbits < 15 (e.g. 0) or >= 24, default to 32 bpp
|
||||
if( bpp < 15 || bpp >= 24 )
|
||||
{
|
||||
bpp = 32;
|
||||
}
|
||||
|
||||
// Find best match
|
||||
bestmode = _glfwGetClosestVideoModeBPP( w, h, &bpp, refresh );
|
||||
|
||||
// Convert "bits per pixel" to red, green & blue sizes
|
||||
bpp2rgb( bpp, r, g, b );
|
||||
|
||||
return bestmode;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Change the current video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwSetVideoModeMODE( int mode )
|
||||
{
|
||||
DEVMODE dm;
|
||||
int success;
|
||||
|
||||
// Get the parameters for the best matching display mode
|
||||
dm.dmSize = sizeof( DEVMODE );
|
||||
(void) EnumDisplaySettings( NULL, mode, &dm );
|
||||
|
||||
// Set which fields we want to specify
|
||||
dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
|
||||
|
||||
// Do we have a prefered refresh rate?
|
||||
if( _glfwWin.desiredRefreshRate > 0 )
|
||||
{
|
||||
dm.dmFields = dm.dmFields | DM_DISPLAYFREQUENCY;
|
||||
dm.dmDisplayFrequency = _glfwWin.desiredRefreshRate;
|
||||
}
|
||||
|
||||
// Change display setting
|
||||
dm.dmSize = sizeof( DEVMODE );
|
||||
success = ChangeDisplaySettings( &dm, CDS_FULLSCREEN );
|
||||
|
||||
// If the mode change was not possible, query the current display
|
||||
// settings (we'll use the desktop resolution for fullscreen mode)
|
||||
if( success == DISP_CHANGE_SUCCESSFUL )
|
||||
{
|
||||
_glfwWin.modeID = mode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_glfwWin.modeID = ENUM_REGISTRY_SETTINGS;
|
||||
EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dm );
|
||||
}
|
||||
|
||||
// Set the window size to that of the display mode
|
||||
_glfwWin.width = dm.dmPelsWidth;
|
||||
_glfwWin.height = dm.dmPelsHeight;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Change the current video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwSetVideoMode( int *w, int *h, int r, int g, int b, int refresh )
|
||||
{
|
||||
int bestmode;
|
||||
|
||||
// Find a best match mode
|
||||
bestmode = getClosestVideoMode( w, h, &r, &g, &b, &refresh );
|
||||
|
||||
// Change mode
|
||||
_glfwSetVideoModeMODE( bestmode );
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Get a list of available video modes
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount )
|
||||
{
|
||||
int count, success, mode, i, j;
|
||||
int m1, m2, bpp, r, g, b;
|
||||
DEVMODE dm;
|
||||
|
||||
// Loop through all video modes and extract all the UNIQUE modes
|
||||
count = 0;
|
||||
mode = 0;
|
||||
do
|
||||
{
|
||||
// Get video mode properties
|
||||
dm.dmSize = sizeof( DEVMODE );
|
||||
success = EnumDisplaySettings( NULL, mode, &dm );
|
||||
|
||||
// Is it a valid mode? (only list depths >= 15 bpp)
|
||||
if( success && dm.dmBitsPerPel >= 15 )
|
||||
{
|
||||
// Convert to RGB, and back to bpp ("mask out" alpha bits etc)
|
||||
bpp2rgb( dm.dmBitsPerPel, &r, &g, &b );
|
||||
bpp = r + g + b;
|
||||
|
||||
// Mode "code" for this mode
|
||||
m1 = (bpp << 25) | (dm.dmPelsWidth * dm.dmPelsHeight);
|
||||
|
||||
// Insert mode in list (sorted), and avoid duplicates
|
||||
for( i = 0; i < count; i ++ )
|
||||
{
|
||||
// Mode "code" for already listed mode
|
||||
bpp = list[i].RedBits + list[i].GreenBits +
|
||||
list[i].BlueBits;
|
||||
m2 = (bpp << 25) | (list[i].Width * list[i].Height);
|
||||
if( m1 <= m2 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// New entry at the end of the list?
|
||||
if( i >= count )
|
||||
{
|
||||
list[count].Width = dm.dmPelsWidth;
|
||||
list[count].Height = dm.dmPelsHeight;
|
||||
list[count].RedBits = r;
|
||||
list[count].GreenBits = g;
|
||||
list[count].BlueBits = b;
|
||||
count ++;
|
||||
}
|
||||
// Insert new entry in the list?
|
||||
else if( m1 < m2 )
|
||||
{
|
||||
for( j = count; j > i; j -- )
|
||||
{
|
||||
list[j] = list[j-1];
|
||||
}
|
||||
list[i].Width = dm.dmPelsWidth;
|
||||
list[i].Height = dm.dmPelsHeight;
|
||||
list[i].RedBits = r;
|
||||
list[i].GreenBits = g;
|
||||
list[i].BlueBits = b;
|
||||
count ++;
|
||||
}
|
||||
}
|
||||
mode ++;
|
||||
}
|
||||
while( success && (count < maxcount) );
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the desktop video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformGetDesktopMode( GLFWvidmode *mode )
|
||||
{
|
||||
DEVMODE dm;
|
||||
|
||||
// Get desktop display mode
|
||||
dm.dmSize = sizeof( DEVMODE );
|
||||
(void) EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dm );
|
||||
|
||||
// Return desktop mode parameters
|
||||
mode->Width = dm.dmPelsWidth;
|
||||
mode->Height = dm.dmPelsHeight;
|
||||
bpp2rgb( dm.dmBitsPerPel, &mode->RedBits, &mode->GreenBits, &mode->BlueBits );
|
||||
}
|
||||
|
||||
82
ogl_editor/external/glfw/lib/win32/win32_glext.c
vendored
Normal file
82
ogl_editor/external/glfw/lib/win32/win32_glext.c
vendored
Normal file
@ -0,0 +1,82 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Check if the current context supports the specified WGL extension
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformExtensionSupported( const char *extension )
|
||||
{
|
||||
const GLubyte *extensions;
|
||||
|
||||
if( _glfwWin.GetExtensionsStringEXT != NULL )
|
||||
{
|
||||
extensions = (GLubyte *) _glfwWin.GetExtensionsStringEXT();
|
||||
if( extensions != NULL )
|
||||
{
|
||||
if( _glfwStringInExtensionString( extension, extensions ) )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( _glfwWin.GetExtensionsStringARB != NULL )
|
||||
{
|
||||
extensions = (GLubyte *) _glfwWin.GetExtensionsStringARB( _glfwWin.DC );
|
||||
if( extensions != NULL )
|
||||
{
|
||||
if( _glfwStringInExtensionString( extension, extensions ) )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the function pointer to an OpenGL function
|
||||
//========================================================================
|
||||
|
||||
void *_glfwPlatformGetProcAddress( const char *procname )
|
||||
{
|
||||
return (void *) wglGetProcAddress( procname );
|
||||
}
|
||||
|
||||
358
ogl_editor/external/glfw/lib/win32/win32_init.c
vendored
Normal file
358
ogl_editor/external/glfw/lib/win32/win32_init.c
vendored
Normal file
@ -0,0 +1,358 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
// With the Borland C++ compiler, we want to disable FPU exceptions
|
||||
#ifdef __BORLANDC__
|
||||
#include <float.h>
|
||||
#endif // __BORLANDC__
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Load necessary libraries (DLLs)
|
||||
//========================================================================
|
||||
|
||||
static int _glfwInitLibraries( void )
|
||||
{
|
||||
// gdi32.dll (OpenGL pixel format functions & SwapBuffers)
|
||||
#ifndef _GLFW_NO_DLOAD_GDI32
|
||||
_glfwLibrary.Libs.gdi32 = LoadLibrary( "gdi32.dll" );
|
||||
if( _glfwLibrary.Libs.gdi32 != NULL )
|
||||
{
|
||||
_glfwLibrary.Libs.ChoosePixelFormat = (CHOOSEPIXELFORMAT_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.gdi32, "ChoosePixelFormat" );
|
||||
_glfwLibrary.Libs.DescribePixelFormat = (DESCRIBEPIXELFORMAT_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.gdi32, "DescribePixelFormat" );
|
||||
_glfwLibrary.Libs.GetPixelFormat = (GETPIXELFORMAT_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.gdi32, "GetPixelFormat" );
|
||||
_glfwLibrary.Libs.SetPixelFormat = (SETPIXELFORMAT_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.gdi32, "SetPixelFormat" );
|
||||
_glfwLibrary.Libs.SwapBuffers = (SWAPBUFFERS_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.gdi32, "SwapBuffers" );
|
||||
if( _glfwLibrary.Libs.ChoosePixelFormat == NULL ||
|
||||
_glfwLibrary.Libs.DescribePixelFormat == NULL ||
|
||||
_glfwLibrary.Libs.GetPixelFormat == NULL ||
|
||||
_glfwLibrary.Libs.SetPixelFormat == NULL ||
|
||||
_glfwLibrary.Libs.SwapBuffers == NULL )
|
||||
{
|
||||
FreeLibrary( _glfwLibrary.Libs.gdi32 );
|
||||
_glfwLibrary.Libs.gdi32 = NULL;
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
#endif // _GLFW_NO_DLOAD_GDI32
|
||||
|
||||
// winmm.dll (for joystick and timer support)
|
||||
#ifndef _GLFW_NO_DLOAD_WINMM
|
||||
_glfwLibrary.Libs.winmm = LoadLibrary( "winmm.dll" );
|
||||
if( _glfwLibrary.Libs.winmm != NULL )
|
||||
{
|
||||
_glfwLibrary.Libs.joyGetDevCapsA = (JOYGETDEVCAPSA_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetDevCapsA" );
|
||||
_glfwLibrary.Libs.joyGetPos = (JOYGETPOS_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetPos" );
|
||||
_glfwLibrary.Libs.joyGetPosEx = (JOYGETPOSEX_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetPosEx" );
|
||||
_glfwLibrary.Libs.timeGetTime = (TIMEGETTIME_T)
|
||||
GetProcAddress( _glfwLibrary.Libs.winmm, "timeGetTime" );
|
||||
if( _glfwLibrary.Libs.joyGetDevCapsA == NULL ||
|
||||
_glfwLibrary.Libs.joyGetPos == NULL ||
|
||||
_glfwLibrary.Libs.joyGetPosEx == NULL ||
|
||||
_glfwLibrary.Libs.timeGetTime == NULL )
|
||||
{
|
||||
FreeLibrary( _glfwLibrary.Libs.winmm );
|
||||
_glfwLibrary.Libs.winmm = NULL;
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
#endif // _GLFW_NO_DLOAD_WINMM
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Unload used libraries (DLLs)
|
||||
//========================================================================
|
||||
|
||||
static void _glfwFreeLibraries( void )
|
||||
{
|
||||
// gdi32.dll
|
||||
#ifndef _GLFW_NO_DLOAD_GDI32
|
||||
if( _glfwLibrary.Libs.gdi32 != NULL )
|
||||
{
|
||||
FreeLibrary( _glfwLibrary.Libs.gdi32 );
|
||||
_glfwLibrary.Libs.gdi32 = NULL;
|
||||
}
|
||||
#endif // _GLFW_NO_DLOAD_GDI32
|
||||
|
||||
// winmm.dll
|
||||
#ifndef _GLFW_NO_DLOAD_WINMM
|
||||
if( _glfwLibrary.Libs.winmm != NULL )
|
||||
{
|
||||
FreeLibrary( _glfwLibrary.Libs.winmm );
|
||||
_glfwLibrary.Libs.winmm = NULL;
|
||||
}
|
||||
#endif // _GLFW_NO_DLOAD_WINMM
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Initialize GLFW thread package
|
||||
//========================================================================
|
||||
|
||||
static void _glfwInitThreads( void )
|
||||
{
|
||||
// Initialize critical section handle
|
||||
InitializeCriticalSection( &_glfwThrd.CriticalSection );
|
||||
|
||||
// The first thread (the main thread) has ID 0
|
||||
_glfwThrd.NextID = 0;
|
||||
|
||||
// Fill out information about the main thread (this thread)
|
||||
_glfwThrd.First.ID = _glfwThrd.NextID ++;
|
||||
_glfwThrd.First.Function = NULL;
|
||||
_glfwThrd.First.Handle = GetCurrentThread();
|
||||
_glfwThrd.First.WinID = GetCurrentThreadId();
|
||||
_glfwThrd.First.Previous = NULL;
|
||||
_glfwThrd.First.Next = NULL;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Terminate GLFW thread package
|
||||
//========================================================================
|
||||
|
||||
static void _glfwTerminateThreads( void )
|
||||
{
|
||||
_GLFWthread *t, *t_next;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Kill all threads (NOTE: THE USER SHOULD WAIT FOR ALL THREADS TO
|
||||
// DIE, _BEFORE_ CALLING glfwTerminate()!!!)
|
||||
t = _glfwThrd.First.Next;
|
||||
while( t != NULL )
|
||||
{
|
||||
// Get pointer to next thread
|
||||
t_next = t->Next;
|
||||
|
||||
// Simply murder the process, no mercy!
|
||||
if( TerminateThread( t->Handle, 0 ) )
|
||||
{
|
||||
// Close thread handle
|
||||
CloseHandle( t->Handle );
|
||||
|
||||
// Free memory allocated for this thread
|
||||
free( (void *) t );
|
||||
}
|
||||
|
||||
// Select next thread in list
|
||||
t = t_next;
|
||||
}
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Delete critical section handle
|
||||
DeleteCriticalSection( &_glfwThrd.CriticalSection );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Terminate GLFW when exiting application
|
||||
//========================================================================
|
||||
|
||||
void _glfwTerminate_atexit( void )
|
||||
{
|
||||
glfwTerminate();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialize various GLFW state
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformInit( void )
|
||||
{
|
||||
OSVERSIONINFO osi;
|
||||
|
||||
// To make SetForegroundWindow() work as we want, we need to fiddle
|
||||
// with the FOREGROUNDLOCKTIMEOUT system setting (we do this as early
|
||||
// as possible in the hope of still being the foreground process)
|
||||
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT, 0,
|
||||
&_glfwLibrary.Sys.foregroundLockTimeout, 0 );
|
||||
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0,
|
||||
SPIF_SENDCHANGE );
|
||||
|
||||
// Check which OS version we are running
|
||||
osi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
|
||||
GetVersionEx( &osi );
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_UNKNOWN;
|
||||
if( osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
|
||||
{
|
||||
if( osi.dwMajorVersion == 4 && osi.dwMinorVersion < 10 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_95;
|
||||
}
|
||||
else if( osi.dwMajorVersion == 4 && osi.dwMinorVersion < 90 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_98;
|
||||
}
|
||||
else if( osi.dwMajorVersion == 4 && osi.dwMinorVersion == 90 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_ME;
|
||||
}
|
||||
else if( osi.dwMajorVersion >= 4 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_UNKNOWN_9x;
|
||||
}
|
||||
}
|
||||
else if( osi.dwPlatformId == VER_PLATFORM_WIN32_NT )
|
||||
{
|
||||
if( osi.dwMajorVersion == 4 && osi.dwMinorVersion == 0 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_NT4;
|
||||
}
|
||||
else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 0 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_2K;
|
||||
}
|
||||
else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 1 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_XP;
|
||||
}
|
||||
else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 2 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_NET_SERVER;
|
||||
}
|
||||
else if( osi.dwMajorVersion >= 5 )
|
||||
{
|
||||
_glfwLibrary.Sys.winVer = _GLFW_WIN_UNKNOWN_NT;
|
||||
}
|
||||
}
|
||||
|
||||
// Do we have Unicode support?
|
||||
if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 )
|
||||
{
|
||||
// Windows NT/2000/XP/.NET has Unicode support
|
||||
_glfwLibrary.Sys.hasUnicode = GL_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Windows 9x/ME does not have Unicode support
|
||||
_glfwLibrary.Sys.hasUnicode = GL_FALSE;
|
||||
}
|
||||
|
||||
// Load libraries (DLLs)
|
||||
if( !_glfwInitLibraries() )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// With the Borland C++ compiler, we want to disable FPU exceptions
|
||||
// (this is recommended for OpenGL applications under Windows)
|
||||
#ifdef __BORLANDC__
|
||||
_control87( MCW_EM, MCW_EM );
|
||||
#endif
|
||||
|
||||
// Retrieve GLFW instance handle
|
||||
_glfwLibrary.instance = GetModuleHandle( NULL );
|
||||
|
||||
// System keys are not disabled
|
||||
_glfwWin.keyboardHook = NULL;
|
||||
|
||||
// Initialise thread package
|
||||
_glfwInitThreads();
|
||||
|
||||
_glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode );
|
||||
|
||||
// Install atexit() routine
|
||||
atexit( _glfwTerminate_atexit );
|
||||
|
||||
// Start the timer
|
||||
_glfwInitTimer();
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Close window and kill all threads
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformTerminate( void )
|
||||
{
|
||||
// Only the main thread is allowed to do this...
|
||||
if( GetCurrentThreadId() != _glfwThrd.First.WinID )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Close OpenGL window
|
||||
glfwCloseWindow();
|
||||
|
||||
// Kill thread package
|
||||
_glfwTerminateThreads();
|
||||
|
||||
// Enable system keys again (if they were disabled)
|
||||
glfwEnable( GLFW_SYSTEM_KEYS );
|
||||
|
||||
// Unload libraries (DLLs)
|
||||
_glfwFreeLibraries();
|
||||
|
||||
// Restore FOREGROUNDLOCKTIMEOUT system setting
|
||||
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
|
||||
(LPVOID) (INT_PTR) _glfwLibrary.Sys.foregroundLockTimeout,
|
||||
SPIF_SENDCHANGE );
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
233
ogl_editor/external/glfw/lib/win32/win32_joystick.c
vendored
Normal file
233
ogl_editor/external/glfw/lib/win32/win32_joystick.c
vendored
Normal file
@ -0,0 +1,233 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Return GL_TRUE if joystick is present, else return GL_FALSE.
|
||||
//========================================================================
|
||||
|
||||
static int _glfwJoystickPresent( int joy )
|
||||
{
|
||||
JOYINFO ji;
|
||||
|
||||
// Windows NT 4.0 MMSYSTEM only supports 2 sticks (other Windows
|
||||
// versions support 16 sticks)
|
||||
if( _glfwLibrary.Sys.winVer == _GLFW_WIN_NT4 && joy > GLFW_JOYSTICK_2 )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Is it a valid stick ID (Windows don't support more than 16 sticks)?
|
||||
if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_16 )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Is the joystick present?
|
||||
if( _glfw_joyGetPos( joy - GLFW_JOYSTICK_1, &ji ) != JOYERR_NOERROR )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Calculate joystick position
|
||||
//========================================================================
|
||||
|
||||
static float _glfwCalcJoystickPos( DWORD pos, DWORD min, DWORD max )
|
||||
{
|
||||
float fpos = (float) pos;
|
||||
float fmin = (float) min;
|
||||
float fmax = (float) max;
|
||||
return (2.0f*(fpos - fmin) / (fmax - fmin)) - 1.0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Determine joystick capabilities
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickParam( int joy, int param )
|
||||
{
|
||||
JOYCAPS jc;
|
||||
|
||||
// return 0;
|
||||
|
||||
// Is joystick present?
|
||||
if( !_glfwJoystickPresent( joy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// We got this far, the joystick is present
|
||||
if( param == GLFW_PRESENT )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
// Get joystick capabilities
|
||||
_glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) );
|
||||
|
||||
switch( param )
|
||||
{
|
||||
case GLFW_AXES:
|
||||
// Return number of joystick axes
|
||||
return jc.wNumAxes;
|
||||
|
||||
case GLFW_BUTTONS:
|
||||
// Return number of joystick axes
|
||||
return jc.wNumButtons;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick axis positions
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes )
|
||||
{
|
||||
JOYCAPS jc;
|
||||
JOYINFOEX ji;
|
||||
int axis;
|
||||
|
||||
// return 0;
|
||||
|
||||
// Is joystick present?
|
||||
if( !_glfwJoystickPresent( joy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get joystick capabilities
|
||||
_glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) );
|
||||
|
||||
// Get joystick state
|
||||
ji.dwSize = sizeof( JOYINFOEX );
|
||||
ji.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ |
|
||||
JOY_RETURNR | JOY_RETURNU | JOY_RETURNV;
|
||||
_glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji );
|
||||
|
||||
// Get position values for all axes
|
||||
axis = 0;
|
||||
if( axis < numaxes )
|
||||
{
|
||||
pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwXpos, jc.wXmin,
|
||||
jc.wXmax );
|
||||
}
|
||||
if( axis < numaxes )
|
||||
{
|
||||
pos[ axis++ ] = -_glfwCalcJoystickPos( ji.dwYpos, jc.wYmin,
|
||||
jc.wYmax );
|
||||
}
|
||||
if( axis < numaxes && jc.wCaps & JOYCAPS_HASZ )
|
||||
{
|
||||
pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwZpos, jc.wZmin,
|
||||
jc.wZmax );
|
||||
}
|
||||
if( axis < numaxes && jc.wCaps & JOYCAPS_HASR )
|
||||
{
|
||||
pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwRpos, jc.wRmin,
|
||||
jc.wRmax );
|
||||
}
|
||||
if( axis < numaxes && jc.wCaps & JOYCAPS_HASU )
|
||||
{
|
||||
pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwUpos, jc.wUmin,
|
||||
jc.wUmax );
|
||||
}
|
||||
if( axis < numaxes && jc.wCaps & JOYCAPS_HASV )
|
||||
{
|
||||
pos[ axis++ ] = -_glfwCalcJoystickPos( ji.dwVpos, jc.wVmin,
|
||||
jc.wVmax );
|
||||
}
|
||||
|
||||
// Return number of returned axes
|
||||
return axis;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick button states
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons,
|
||||
int numbuttons )
|
||||
{
|
||||
JOYCAPS jc;
|
||||
JOYINFOEX ji;
|
||||
int button;
|
||||
|
||||
// return 0;
|
||||
|
||||
// Is joystick present?
|
||||
if( !_glfwJoystickPresent( joy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get joystick capabilities
|
||||
_glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) );
|
||||
|
||||
// Get joystick state
|
||||
ji.dwSize = sizeof( JOYINFOEX );
|
||||
ji.dwFlags = JOY_RETURNBUTTONS;
|
||||
_glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji );
|
||||
|
||||
// Get states of all requested buttons
|
||||
button = 0;
|
||||
while( button < numbuttons && button < (int) jc.wNumButtons )
|
||||
{
|
||||
buttons[ button ] = (unsigned char)
|
||||
(ji.dwButtons & (1UL << button) ? GLFW_PRESS : GLFW_RELEASE);
|
||||
button ++;
|
||||
}
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
506
ogl_editor/external/glfw/lib/win32/win32_thread.c
vendored
Normal file
506
ogl_editor/external/glfw/lib/win32/win32_thread.c
vendored
Normal file
@ -0,0 +1,506 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
// This is an implementation of POSIX "compatible" condition variables for
|
||||
// Win32, as described by Douglas C. Schmidt and Irfan Pyarali:
|
||||
// http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
|
||||
//************************************************************************
|
||||
|
||||
enum {
|
||||
_GLFW_COND_SIGNAL = 0,
|
||||
_GLFW_COND_BROADCAST = 1
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
// Signal and broadcast event HANDLEs
|
||||
HANDLE events[ 2 ];
|
||||
|
||||
// Count of the number of waiters
|
||||
unsigned int waiters_count;
|
||||
|
||||
// Serialize access to <waiters_count>
|
||||
CRITICAL_SECTION waiters_count_lock;
|
||||
} _GLFWcond;
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// This is simply a "wrapper" for calling the user thread function.
|
||||
//========================================================================
|
||||
|
||||
DWORD WINAPI _glfwNewThread( LPVOID lpParam )
|
||||
{
|
||||
GLFWthreadfun threadfun;
|
||||
_GLFWthread *t;
|
||||
|
||||
// Get pointer to thread information for current thread
|
||||
t = _glfwGetThreadPointer( _glfwPlatformGetThreadID() );
|
||||
if( t == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get user thread function pointer
|
||||
threadfun = t->Function;
|
||||
|
||||
// Call the user thread function
|
||||
threadfun( (void *) lpParam );
|
||||
|
||||
// Remove thread from thread list
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
_glfwRemoveThread( t );
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// When the thread function returns, the thread will die...
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW user functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Create a new thread
|
||||
//========================================================================
|
||||
|
||||
GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg )
|
||||
{
|
||||
GLFWthread ID;
|
||||
_GLFWthread *t, *t_tmp;
|
||||
HANDLE hThread;
|
||||
DWORD dwThreadId;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Create a new thread information memory area
|
||||
t = (_GLFWthread *) malloc( sizeof(_GLFWthread) );
|
||||
if( t == NULL )
|
||||
{
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get a new unique thread id
|
||||
ID = _glfwThrd.NextID ++;
|
||||
|
||||
// Store thread information in the thread list
|
||||
t->Function = fun;
|
||||
t->ID = ID;
|
||||
|
||||
// Create thread
|
||||
hThread = CreateThread(
|
||||
NULL, // Default security attributes
|
||||
0, // Default stack size (1 MB)
|
||||
_glfwNewThread, // Thread function (a wrapper function)
|
||||
(LPVOID)arg, // Argument to thread is the user argument
|
||||
0, // Default creation flags
|
||||
&dwThreadId // Returned thread identifier
|
||||
);
|
||||
|
||||
// Did the thread creation fail?
|
||||
if( hThread == NULL )
|
||||
{
|
||||
free( (void *) t );
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Store more thread information in the thread list
|
||||
t->Handle = hThread;
|
||||
t->WinID = dwThreadId;
|
||||
|
||||
// Append thread to thread list
|
||||
t_tmp = &_glfwThrd.First;
|
||||
while( t_tmp->Next != NULL )
|
||||
{
|
||||
t_tmp = t_tmp->Next;
|
||||
}
|
||||
t_tmp->Next = t;
|
||||
t->Previous = t_tmp;
|
||||
t->Next = NULL;
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Return the GLFW thread ID
|
||||
return ID;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT
|
||||
// BE USED EXCEPT IN EXTREME SITUATIONS!
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyThread( GLFWthread ID )
|
||||
{
|
||||
_GLFWthread *t;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Get thread information pointer
|
||||
t = _glfwGetThreadPointer( ID );
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return;
|
||||
}
|
||||
|
||||
// Simply murder the process, no mercy!
|
||||
if( TerminateThread( t->Handle, 0 ) )
|
||||
{
|
||||
// Close thread handle
|
||||
CloseHandle( t->Handle );
|
||||
|
||||
// Remove thread from thread list
|
||||
_glfwRemoveThread( t );
|
||||
}
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Wait for a thread to die
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformWaitThread( GLFWthread ID, int waitmode )
|
||||
{
|
||||
DWORD result;
|
||||
HANDLE hThread;
|
||||
_GLFWthread *t;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Get thread information pointer
|
||||
t = _glfwGetThreadPointer( ID );
|
||||
|
||||
// Is the thread already dead?
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
// Get thread handle
|
||||
hThread = t->Handle;
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Wait for thread to die
|
||||
if( waitmode == GLFW_WAIT )
|
||||
{
|
||||
result = WaitForSingleObject( hThread, INFINITE );
|
||||
}
|
||||
else if( waitmode == GLFW_NOWAIT )
|
||||
{
|
||||
result = WaitForSingleObject( hThread, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Did we have a time-out?
|
||||
if( result == WAIT_TIMEOUT )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return the thread ID for the current thread
|
||||
//========================================================================
|
||||
|
||||
GLFWthread _glfwPlatformGetThreadID( void )
|
||||
{
|
||||
_GLFWthread *t;
|
||||
GLFWthread ID = -1;
|
||||
DWORD WinID;
|
||||
|
||||
// Get Windows thread ID
|
||||
WinID = GetCurrentThreadId();
|
||||
|
||||
// Enter critical section (to avoid an inconsistent thread list)
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Loop through entire list of threads to find the matching Windows
|
||||
// thread ID
|
||||
for( t = &_glfwThrd.First; t != NULL; t = t->Next )
|
||||
{
|
||||
if( t->WinID == WinID )
|
||||
{
|
||||
ID = t->ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Return the found GLFW thread identifier
|
||||
return ID;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Create a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
GLFWmutex _glfwPlatformCreateMutex( void )
|
||||
{
|
||||
CRITICAL_SECTION *mutex;
|
||||
|
||||
// Allocate memory for mutex
|
||||
mutex = (CRITICAL_SECTION *) malloc( sizeof(CRITICAL_SECTION) );
|
||||
if( !mutex )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialize mutex
|
||||
InitializeCriticalSection( mutex );
|
||||
|
||||
// Cast to GLFWmutex and return
|
||||
return (GLFWmutex) mutex;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Destroy a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Destroy mutex
|
||||
DeleteCriticalSection( (CRITICAL_SECTION *) mutex );
|
||||
free( mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Request access to a mutex
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformLockMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Wait for mutex to be released
|
||||
EnterCriticalSection( (CRITICAL_SECTION *) mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Release a mutex
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformUnlockMutex( GLFWmutex mutex )
|
||||
{
|
||||
// Release mutex
|
||||
LeaveCriticalSection( (CRITICAL_SECTION *) mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Create a new condition variable object
|
||||
//========================================================================
|
||||
|
||||
GLFWcond _glfwPlatformCreateCond( void )
|
||||
{
|
||||
_GLFWcond *cond;
|
||||
|
||||
// Allocate memory for condition variable
|
||||
cond = (_GLFWcond *) malloc( sizeof(_GLFWcond) );
|
||||
if( !cond )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialize condition variable
|
||||
cond->waiters_count = 0;
|
||||
cond->events[ _GLFW_COND_SIGNAL ] = CreateEvent( NULL, FALSE,
|
||||
FALSE, NULL );
|
||||
cond->events[ _GLFW_COND_BROADCAST ] = CreateEvent( NULL, TRUE,
|
||||
FALSE, NULL );
|
||||
InitializeCriticalSection( &cond->waiters_count_lock );
|
||||
|
||||
// Cast to GLFWcond and return
|
||||
return (GLFWcond) cond;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Destroy a condition variable object
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyCond( GLFWcond cond )
|
||||
{
|
||||
// Close the condition variable handles
|
||||
CloseHandle( ((_GLFWcond *)cond)->events[ _GLFW_COND_SIGNAL ] );
|
||||
CloseHandle( ((_GLFWcond *)cond)->events[ _GLFW_COND_BROADCAST ] );
|
||||
|
||||
// Delete critical section
|
||||
DeleteCriticalSection( &((_GLFWcond *)cond)->waiters_count_lock );
|
||||
|
||||
// Free memory for condition variable
|
||||
free( (void *) cond );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Wait for a condition to be raised
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout )
|
||||
{
|
||||
_GLFWcond *cv = (_GLFWcond *) cond;
|
||||
int result, last_waiter;
|
||||
DWORD timeout_ms;
|
||||
|
||||
// Avoid race conditions
|
||||
EnterCriticalSection( &cv->waiters_count_lock );
|
||||
cv->waiters_count ++;
|
||||
LeaveCriticalSection( &cv->waiters_count_lock );
|
||||
|
||||
// It's ok to release the mutex here since Win32 manual-reset events
|
||||
// maintain state when used with SetEvent()
|
||||
LeaveCriticalSection( (CRITICAL_SECTION *) mutex );
|
||||
|
||||
// Translate timeout into milliseconds
|
||||
if( timeout >= GLFW_INFINITY )
|
||||
{
|
||||
timeout_ms = INFINITE;
|
||||
}
|
||||
else
|
||||
{
|
||||
timeout_ms = (DWORD) (1000.0 * timeout + 0.5);
|
||||
if( timeout_ms <= 0 )
|
||||
{
|
||||
timeout_ms = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for either event to become signaled due to glfwSignalCond or
|
||||
// glfwBroadcastCond being called
|
||||
result = WaitForMultipleObjects( 2, cv->events, FALSE, timeout_ms );
|
||||
|
||||
// Check if we are the last waiter
|
||||
EnterCriticalSection( &cv->waiters_count_lock );
|
||||
cv->waiters_count --;
|
||||
last_waiter = (result == WAIT_OBJECT_0 + _GLFW_COND_BROADCAST) &&
|
||||
(cv->waiters_count == 0);
|
||||
LeaveCriticalSection( &cv->waiters_count_lock );
|
||||
|
||||
// Some thread called glfwBroadcastCond
|
||||
if( last_waiter )
|
||||
{
|
||||
// We're the last waiter to be notified or to stop waiting, so
|
||||
// reset the manual event
|
||||
ResetEvent( cv->events[ _GLFW_COND_BROADCAST ] );
|
||||
}
|
||||
|
||||
// Reacquire the mutex
|
||||
EnterCriticalSection( (CRITICAL_SECTION *) mutex );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Signal a condition to one waiting thread
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSignalCond( GLFWcond cond )
|
||||
{
|
||||
_GLFWcond *cv = (_GLFWcond *) cond;
|
||||
int have_waiters;
|
||||
|
||||
// Avoid race conditions
|
||||
EnterCriticalSection( &cv->waiters_count_lock );
|
||||
have_waiters = cv->waiters_count > 0;
|
||||
LeaveCriticalSection( &cv->waiters_count_lock );
|
||||
|
||||
if( have_waiters )
|
||||
{
|
||||
SetEvent( cv->events[ _GLFW_COND_SIGNAL ] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Broadcast a condition to all waiting threads
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformBroadcastCond( GLFWcond cond )
|
||||
{
|
||||
_GLFWcond *cv = (_GLFWcond *) cond;
|
||||
int have_waiters;
|
||||
|
||||
// Avoid race conditions
|
||||
EnterCriticalSection( &cv->waiters_count_lock );
|
||||
have_waiters = cv->waiters_count > 0;
|
||||
LeaveCriticalSection( &cv->waiters_count_lock );
|
||||
|
||||
if( have_waiters )
|
||||
{
|
||||
SetEvent( cv->events[ _GLFW_COND_BROADCAST ] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return the number of processors in the system.
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetNumberOfProcessors( void )
|
||||
{
|
||||
SYSTEM_INFO si;
|
||||
|
||||
// Get hardware system information
|
||||
GetSystemInfo( &si );
|
||||
|
||||
return (int) si.dwNumberOfProcessors;
|
||||
}
|
||||
|
||||
146
ogl_editor/external/glfw/lib/win32/win32_time.c
vendored
Normal file
146
ogl_editor/external/glfw/lib/win32/win32_time.c
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: Win32/WGL
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialise timer
|
||||
//========================================================================
|
||||
|
||||
void _glfwInitTimer( void )
|
||||
{
|
||||
__int64 freq;
|
||||
|
||||
// Check if we have a performance counter
|
||||
if( QueryPerformanceFrequency( (LARGE_INTEGER *)&freq ) )
|
||||
{
|
||||
// Performance counter is available => use it!
|
||||
_glfwLibrary.Timer.HasPerformanceCounter = GL_TRUE;
|
||||
|
||||
// Counter resolution is 1 / counter frequency
|
||||
_glfwLibrary.Timer.Resolution = 1.0 / (double)freq;
|
||||
|
||||
// Set start time for timer
|
||||
QueryPerformanceCounter( (LARGE_INTEGER *)&_glfwLibrary.Timer.t0_64 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// No performace counter available => use the tick counter
|
||||
_glfwLibrary.Timer.HasPerformanceCounter = GL_FALSE;
|
||||
|
||||
// Counter resolution is 1 ms
|
||||
_glfwLibrary.Timer.Resolution = 0.001;
|
||||
|
||||
// Set start time for timer
|
||||
_glfwLibrary.Timer.t0_32 = _glfw_timeGetTime();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Return timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
double _glfwPlatformGetTime( void )
|
||||
{
|
||||
double t;
|
||||
__int64 t_64;
|
||||
|
||||
if( _glfwLibrary.Timer.HasPerformanceCounter )
|
||||
{
|
||||
QueryPerformanceCounter( (LARGE_INTEGER *)&t_64 );
|
||||
t = (double)(t_64 - _glfwLibrary.Timer.t0_64);
|
||||
}
|
||||
else
|
||||
{
|
||||
t = (double)(_glfw_timeGetTime() - _glfwLibrary.Timer.t0_32);
|
||||
}
|
||||
|
||||
// Calculate the current time in seconds
|
||||
return t * _glfwLibrary.Timer.Resolution;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSetTime( double t )
|
||||
{
|
||||
__int64 t_64;
|
||||
|
||||
if( _glfwLibrary.Timer.HasPerformanceCounter )
|
||||
{
|
||||
QueryPerformanceCounter( (LARGE_INTEGER *)&t_64 );
|
||||
_glfwLibrary.Timer.t0_64 = t_64 - (__int64)(t/_glfwLibrary.Timer.Resolution);
|
||||
}
|
||||
else
|
||||
{
|
||||
_glfwLibrary.Timer.t0_32 = _glfw_timeGetTime() - (int)(t*1000.0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Put a thread to sleep for a specified amount of time
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSleep( double time )
|
||||
{
|
||||
DWORD t;
|
||||
|
||||
if( time == 0.0 )
|
||||
{
|
||||
t = 0;
|
||||
}
|
||||
else if( time < 0.001 )
|
||||
{
|
||||
t = 1;
|
||||
}
|
||||
else if( time > 2147483647.0 )
|
||||
{
|
||||
t = 2147483647;
|
||||
}
|
||||
else
|
||||
{
|
||||
t = (DWORD)(time*1000.0 + 0.5);
|
||||
}
|
||||
Sleep( t );
|
||||
}
|
||||
|
||||
1886
ogl_editor/external/glfw/lib/win32/win32_window.c
vendored
Normal file
1886
ogl_editor/external/glfw/lib/win32/win32_window.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1005
ogl_editor/external/glfw/lib/window.c
vendored
Normal file
1005
ogl_editor/external/glfw/lib/window.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
259
ogl_editor/external/glfw/lib/x11/Makefile.x11.in
vendored
Normal file
259
ogl_editor/external/glfw/lib/x11/Makefile.x11.in
vendored
Normal file
@ -0,0 +1,259 @@
|
||||
|
||||
##########################################################################
|
||||
# Installation prefix (default to /usr/local)
|
||||
##########################################################################
|
||||
PREFIX ?= /usr/local
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Default: Build GLFW static library
|
||||
##########################################################################
|
||||
all: libglfw.a libglfw.so
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Library builder settings
|
||||
##########################################################################
|
||||
AR = ar
|
||||
LD = ld
|
||||
SED = sed
|
||||
INSTALL = install
|
||||
ARFLAGS = -rcs
|
||||
HEADERS = ../../include/GL/glfw.h ../internal.h platform.h
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Install GLFW static library
|
||||
##########################################################################
|
||||
install: libglfw.a libglfw.pc
|
||||
$(INSTALL) -d $(PREFIX)/lib
|
||||
$(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a
|
||||
$(INSTALL) -d $(PREFIX)/include/GL
|
||||
$(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h
|
||||
$(INSTALL) -d $(PREFIX)/lib/pkgconfig
|
||||
$(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Install GLFW static and shared libraries
|
||||
##########################################################################
|
||||
dist-install: libglfw.so install
|
||||
$(INSTALL) -c -m 644 libglfw.so $(PREFIX)/lib/libglfw.so
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files which are part of the GLFW library
|
||||
##########################################################################
|
||||
STATIC_OBJS = \
|
||||
enable.o \
|
||||
fullscreen.o \
|
||||
glext.o \
|
||||
image.o \
|
||||
init.o \
|
||||
input.o \
|
||||
joystick.o \
|
||||
stream.o \
|
||||
tga.o \
|
||||
thread.o \
|
||||
time.o \
|
||||
window.o \
|
||||
x11_enable.o \
|
||||
x11_fullscreen.o \
|
||||
x11_glext.o \
|
||||
x11_init.o \
|
||||
x11_joystick.o \
|
||||
x11_keysym2unicode.o \
|
||||
x11_thread.o \
|
||||
x11_time.o \
|
||||
x11_window.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Object files which are part of the GLFW library
|
||||
##########################################################################
|
||||
SHARED_OBJS = \
|
||||
so_enable.o \
|
||||
so_fullscreen.o \
|
||||
so_glext.o \
|
||||
so_image.o \
|
||||
so_init.o \
|
||||
so_input.o \
|
||||
so_joystick.o \
|
||||
so_stream.o \
|
||||
so_tga.o \
|
||||
so_thread.o \
|
||||
so_time.o \
|
||||
so_window.o \
|
||||
so_x11_enable.o \
|
||||
so_x11_fullscreen.o \
|
||||
so_x11_glext.o \
|
||||
so_x11_init.o \
|
||||
so_x11_joystick.o \
|
||||
so_x11_keysym2unicode.o \
|
||||
so_x11_thread.o \
|
||||
so_x11_time.o \
|
||||
so_x11_window.o
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building libglfw.pc
|
||||
##########################################################################
|
||||
libglfw.pc: libglfw.pc.in
|
||||
$(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building static library
|
||||
##########################################################################
|
||||
libglfw.a: $(STATIC_OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(STATIC_OBJS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rule for building shared library
|
||||
##########################################################################
|
||||
libglfw.so: $(SHARED_OBJS)
|
||||
$(CC) $(SOFLAGS) -o $@ $(SHARED_OBJS) $(LFLAGS) $(LIBS)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building static library object files
|
||||
##########################################################################
|
||||
enable.o: ../enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../enable.c
|
||||
|
||||
fullscreen.o: ../fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../fullscreen.c
|
||||
|
||||
glext.o: ../glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../glext.c
|
||||
|
||||
image.o: ../image.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../image.c
|
||||
|
||||
init.o: ../init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../init.c
|
||||
|
||||
input.o: ../input.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../input.c
|
||||
|
||||
joystick.o: ../joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../joystick.c
|
||||
|
||||
stream.o: ../stream.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../stream.c
|
||||
|
||||
tga.o: ../tga.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../tga.c
|
||||
|
||||
thread.o: ../thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../thread.c
|
||||
|
||||
time.o: ../time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../time.c
|
||||
|
||||
window.o: ../window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ ../window.c
|
||||
|
||||
x11_enable.o: x11_enable.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_enable.c
|
||||
|
||||
x11_fullscreen.o: x11_fullscreen.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_fullscreen.c
|
||||
|
||||
x11_glext.o: x11_glext.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_glext.c
|
||||
|
||||
x11_init.o: x11_init.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_init.c
|
||||
|
||||
x11_joystick.o: x11_joystick.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_joystick.c
|
||||
|
||||
x11_thread.o: x11_thread.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_thread.c
|
||||
|
||||
x11_time.o: x11_time.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_time.c
|
||||
|
||||
x11_window.o: x11_window.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_window.c
|
||||
|
||||
x11_keysym2unicode.o: x11_keysym2unicode.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -o $@ x11_keysym2unicode.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Rules for building shared library object files
|
||||
##########################################################################
|
||||
so_enable.o: ../enable.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../enable.c
|
||||
|
||||
so_fullscreen.o: ../fullscreen.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../fullscreen.c
|
||||
|
||||
so_glext.o: ../glext.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../glext.c
|
||||
|
||||
so_image.o: ../image.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../image.c
|
||||
|
||||
so_init.o: ../init.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../init.c
|
||||
|
||||
so_input.o: ../input.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../input.c
|
||||
|
||||
so_joystick.o: ../joystick.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../joystick.c
|
||||
|
||||
so_stream.o: ../stream.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../stream.c
|
||||
|
||||
so_tga.o: ../tga.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../tga.c
|
||||
|
||||
so_thread.o: ../thread.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../thread.c
|
||||
|
||||
so_time.o: ../time.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../time.c
|
||||
|
||||
so_window.o: ../window.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ ../window.c
|
||||
|
||||
so_x11_enable.o: x11_enable.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_enable.c
|
||||
|
||||
so_x11_fullscreen.o: x11_fullscreen.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_fullscreen.c
|
||||
|
||||
so_x11_glext.o: x11_glext.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_glext.c
|
||||
|
||||
so_x11_init.o: x11_init.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_init.c
|
||||
|
||||
so_x11_joystick.o: x11_joystick.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_joystick.c
|
||||
|
||||
so_x11_thread.o: x11_thread.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_thread.c
|
||||
|
||||
so_x11_time.o: x11_time.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_time.c
|
||||
|
||||
so_x11_window.o: x11_window.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_window.c
|
||||
|
||||
so_x11_keysym2unicode.o: x11_keysym2unicode.c $(HEADERS)
|
||||
$(CC) -fPIC $(CFLAGS) -o $@ x11_keysym2unicode.c
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Clean
|
||||
##########################################################################
|
||||
|
||||
clean:
|
||||
rm -f $(STATIC_OBJS) $(SHARED_OBJS) libglfw.a libglfw.so libglfw.pc
|
||||
|
||||
526
ogl_editor/external/glfw/lib/x11/platform.h
vendored
Normal file
526
ogl_editor/external/glfw/lib/x11/platform.h
vendored
Normal file
@ -0,0 +1,526 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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 <stdint.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
|
||||
|
||||
#if defined( _GLFW_HAS_XF86VIDMODE ) && defined( _GLFW_HAS_XRANDR )
|
||||
#error "Xf86VidMode and RandR extensions cannot both be enabled"
|
||||
#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_EXT_swap_control
|
||||
|
||||
typedef void (*PFNGLXSWAPINTERVALEXT)(Display*,GLXDrawable,int);
|
||||
|
||||
#endif /*GLX_MESA_swap_control*/
|
||||
|
||||
|
||||
#ifndef GLX_MESA_swap_control
|
||||
|
||||
typedef int (*PFNGLXSWAPINTERVALMESA)(int);
|
||||
|
||||
#endif /*GLX_MESA_swap_control*/
|
||||
|
||||
|
||||
#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*/
|
||||
|
||||
|
||||
#ifndef GL_VERSION_3_0
|
||||
|
||||
typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint);
|
||||
|
||||
#endif /*GL_VERSION_3_0*/
|
||||
|
||||
|
||||
|
||||
//========================================================================
|
||||
// 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;
|
||||
|
||||
PFNGLGETSTRINGIPROC GetStringi;
|
||||
|
||||
|
||||
// ========= PLATFORM SPECIFIC PART ======================================
|
||||
|
||||
// Platform specific window resources
|
||||
Colormap colormap; // Window colormap
|
||||
Window window; // Window
|
||||
Window root; // Root window for screen
|
||||
int screen; // Screen ID
|
||||
XVisualInfo *visual; // Visual for selected GLXFBConfig
|
||||
GLXFBConfigID fbconfigID; // ID of selected GLXFBConfig
|
||||
GLXContext context; // OpenGL rendering context
|
||||
Atom wmDeleteWindow; // WM_DELETE_WINDOW atom
|
||||
Atom wmPing; // _NET_WM_PING atom
|
||||
Atom wmState; // _NET_WM_STATE atom
|
||||
Atom wmStateFullscreen; // _NET_WM_STATE_FULLSCREEN atom
|
||||
Atom wmActiveWindow; // _NET_ACTIVE_WINDOW atom
|
||||
Cursor cursor; // Invisible cursor for hidden cursor
|
||||
|
||||
// GLX extensions
|
||||
PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT;
|
||||
PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA;
|
||||
PFNGLXSWAPINTERVALSGIPROC SwapIntervalSGI;
|
||||
PFNGLXGETFBCONFIGATTRIBSGIXPROC GetFBConfigAttribSGIX;
|
||||
PFNGLXCHOOSEFBCONFIGSGIXPROC ChooseFBConfigSGIX;
|
||||
PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC CreateContextWithConfigSGIX;
|
||||
PFNGLXGETVISUALFROMFBCONFIGSGIXPROC GetVisualFromFBConfigSGIX;
|
||||
PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
||||
GLboolean has_GLX_SGIX_fbconfig;
|
||||
GLboolean has_GLX_EXT_swap_control;
|
||||
GLboolean has_GLX_MESA_swap_control;
|
||||
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
|
||||
GLboolean hasEWMH; // True if window manager supports EWMH
|
||||
GLboolean overrideRedirect; // True if window is OverrideRedirect
|
||||
GLboolean keyboardGrabbed; // True if keyboard is currently grabbed
|
||||
GLboolean pointerGrabbed; // True if pointer is currently grabbed
|
||||
GLboolean pointerHidden; // True if pointer is currently hidden
|
||||
|
||||
// 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;
|
||||
|
||||
// Initial desktop mode
|
||||
GLFWvidmode desktopMode;
|
||||
|
||||
// ========= 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 {
|
||||
GLboolean monotonic;
|
||||
double resolution;
|
||||
long long base;
|
||||
} Timer;
|
||||
|
||||
#if defined(_GLFW_HAS_DLOPEN)
|
||||
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 );
|
||||
void _glfwRestoreVideoMode( void );
|
||||
|
||||
// Joystick input
|
||||
void _glfwInitJoysticks( void );
|
||||
void _glfwTerminateJoysticks( void );
|
||||
|
||||
// Unicode support
|
||||
long _glfwKeySym2Unicode( KeySym keysym );
|
||||
|
||||
|
||||
#endif // _platform_h_
|
||||
64
ogl_editor/external/glfw/lib/x11/x11_enable.c
vendored
Normal file
64
ogl_editor/external/glfw/lib/x11/x11_enable.c
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11 (Unix)
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Enable system keys
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformEnableSystemKeys( void )
|
||||
{
|
||||
if( _glfwWin.keyboardGrabbed )
|
||||
{
|
||||
XUngrabKeyboard( _glfwLibrary.display, CurrentTime );
|
||||
_glfwWin.keyboardGrabbed = GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// Disable system keys
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDisableSystemKeys( void )
|
||||
{
|
||||
if( XGrabKeyboard( _glfwLibrary.display, _glfwWin.window, True,
|
||||
GrabModeAsync, GrabModeAsync, CurrentTime ) ==
|
||||
GrabSuccess )
|
||||
{
|
||||
_glfwWin.keyboardGrabbed = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
567
ogl_editor/external/glfw/lib/x11/x11_fullscreen.c
vendored
Normal file
567
ogl_editor/external/glfw/lib/x11/x11_fullscreen.c
vendored
Normal file
@ -0,0 +1,567 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Convert BPP to RGB bits (based on "best guess")
|
||||
//========================================================================
|
||||
|
||||
static void BPP2RGB( int bpp, int *r, int *g, int *b )
|
||||
{
|
||||
int delta;
|
||||
|
||||
// Special case: BPP = 32 (I don't think this is necessary for X11??)
|
||||
if( bpp == 32 )
|
||||
bpp = 24;
|
||||
|
||||
// Convert "bits per pixel" to red, green & blue sizes
|
||||
*r = *g = *b = bpp / 3;
|
||||
delta = bpp - (*r * 3);
|
||||
if( delta >= 1 )
|
||||
{
|
||||
*g = *g + 1;
|
||||
}
|
||||
if( delta == 2 )
|
||||
{
|
||||
*r = *r + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Finds the video mode closest in size to the specified desired size
|
||||
//========================================================================
|
||||
|
||||
int _glfwGetClosestVideoMode( int screen, int *width, int *height, int *rate )
|
||||
{
|
||||
#if defined( _GLFW_HAS_XRANDR )
|
||||
int i, match, bestmatch;
|
||||
int sizecount, bestsize;
|
||||
int ratecount, bestrate;
|
||||
short *ratelist;
|
||||
XRRScreenConfiguration *sc;
|
||||
XRRScreenSize *sizelist;
|
||||
|
||||
if( _glfwLibrary.XRandR.available )
|
||||
{
|
||||
sc = XRRGetScreenInfo( _glfwLibrary.display,
|
||||
RootWindow( _glfwLibrary.display, screen ) );
|
||||
|
||||
sizelist = XRRConfigSizes( sc, &sizecount );
|
||||
|
||||
// Find the best matching mode
|
||||
bestsize = -1;
|
||||
bestmatch = INT_MAX;
|
||||
for( i = 0; i < sizecount; i++ )
|
||||
{
|
||||
match = (*width - sizelist[i].width) *
|
||||
(*width - sizelist[i].width) +
|
||||
(*height - sizelist[i].height) *
|
||||
(*height - sizelist[i].height);
|
||||
if( match < bestmatch )
|
||||
{
|
||||
bestmatch = match;
|
||||
bestsize = i;
|
||||
}
|
||||
}
|
||||
|
||||
if( bestsize != -1 )
|
||||
{
|
||||
// Report width & height of best matching mode
|
||||
*width = sizelist[bestsize].width;
|
||||
*height = sizelist[bestsize].height;
|
||||
|
||||
if( *rate > 0 )
|
||||
{
|
||||
ratelist = XRRConfigRates( sc, bestsize, &ratecount );
|
||||
|
||||
bestrate = -1;
|
||||
bestmatch = INT_MAX;
|
||||
for( i = 0; i < ratecount; i++ )
|
||||
{
|
||||
match = abs( ratelist[i] - *rate );
|
||||
if( match < bestmatch )
|
||||
{
|
||||
bestmatch = match;
|
||||
bestrate = ratelist[i];
|
||||
}
|
||||
}
|
||||
|
||||
if( bestrate != -1 )
|
||||
{
|
||||
*rate = bestrate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Free modelist
|
||||
XRRFreeScreenConfigInfo( sc );
|
||||
|
||||
if( bestsize != -1 )
|
||||
{
|
||||
return bestsize;
|
||||
}
|
||||
}
|
||||
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
||||
XF86VidModeModeInfo **modelist;
|
||||
int modecount, i, bestmode, bestmatch, match;
|
||||
|
||||
// Use the XF86VidMode extension to control video resolution
|
||||
if( _glfwLibrary.XF86VidMode.available )
|
||||
{
|
||||
// Get a list of all available display modes
|
||||
XF86VidModeGetAllModeLines( _glfwLibrary.display, screen,
|
||||
&modecount, &modelist );
|
||||
|
||||
// Find the best matching mode
|
||||
bestmode = -1;
|
||||
bestmatch = INT_MAX;
|
||||
for( i = 0; i < modecount; i++ )
|
||||
{
|
||||
match = (*width - modelist[i]->hdisplay) *
|
||||
(*width - modelist[i]->hdisplay) +
|
||||
(*height - modelist[i]->vdisplay) *
|
||||
(*height - modelist[i]->vdisplay);
|
||||
if( match < bestmatch )
|
||||
{
|
||||
bestmatch = match;
|
||||
bestmode = i;
|
||||
}
|
||||
}
|
||||
|
||||
if( bestmode != -1 )
|
||||
{
|
||||
// Report width & height of best matching mode
|
||||
*width = modelist[ bestmode ]->hdisplay;
|
||||
*height = modelist[ bestmode ]->vdisplay;
|
||||
}
|
||||
|
||||
// Free modelist
|
||||
XFree( modelist );
|
||||
|
||||
if( bestmode != -1 )
|
||||
{
|
||||
return bestmode;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Default: Simply use the screen resolution
|
||||
*width = DisplayWidth( _glfwLibrary.display, screen );
|
||||
*height = DisplayHeight( _glfwLibrary.display, screen );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Change the current video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwSetVideoModeMODE( int screen, int mode, int rate )
|
||||
{
|
||||
#if defined( _GLFW_HAS_XRANDR )
|
||||
XRRScreenConfiguration *sc;
|
||||
Window root;
|
||||
|
||||
if( _glfwLibrary.XRandR.available )
|
||||
{
|
||||
root = RootWindow( _glfwLibrary.display, screen );
|
||||
sc = XRRGetScreenInfo( _glfwLibrary.display, root );
|
||||
|
||||
// Remember old size and flag that we have changed the mode
|
||||
if( !_glfwWin.FS.modeChanged )
|
||||
{
|
||||
_glfwWin.FS.oldSizeID = XRRConfigCurrentConfiguration( sc, &_glfwWin.FS.oldRotation );
|
||||
_glfwWin.FS.oldWidth = DisplayWidth( _glfwLibrary.display, screen );
|
||||
_glfwWin.FS.oldHeight = DisplayHeight( _glfwLibrary.display, screen );
|
||||
|
||||
_glfwWin.FS.modeChanged = GL_TRUE;
|
||||
}
|
||||
|
||||
if( rate > 0 )
|
||||
{
|
||||
// Set desired configuration
|
||||
XRRSetScreenConfigAndRate( _glfwLibrary.display,
|
||||
sc,
|
||||
root,
|
||||
mode,
|
||||
RR_Rotate_0,
|
||||
(short) rate,
|
||||
CurrentTime );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set desired configuration
|
||||
XRRSetScreenConfig( _glfwLibrary.display,
|
||||
sc,
|
||||
root,
|
||||
mode,
|
||||
RR_Rotate_0,
|
||||
CurrentTime );
|
||||
}
|
||||
|
||||
XRRFreeScreenConfigInfo( sc );
|
||||
}
|
||||
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
||||
XF86VidModeModeInfo **modelist;
|
||||
int modecount;
|
||||
|
||||
// Use the XF86VidMode extension to control video resolution
|
||||
if( _glfwLibrary.XF86VidMode.available )
|
||||
{
|
||||
// Get a list of all available display modes
|
||||
XF86VidModeGetAllModeLines( _glfwLibrary.display, screen,
|
||||
&modecount, &modelist );
|
||||
|
||||
// Unlock mode switch if necessary
|
||||
if( _glfwWin.FS.modeChanged )
|
||||
{
|
||||
XF86VidModeLockModeSwitch( _glfwLibrary.display, screen, 0 );
|
||||
}
|
||||
|
||||
// Change the video mode to the desired mode
|
||||
XF86VidModeSwitchToMode( _glfwLibrary.display, screen,
|
||||
modelist[ mode ] );
|
||||
|
||||
// Set viewport to upper left corner (where our window will be)
|
||||
XF86VidModeSetViewPort( _glfwLibrary.display, screen, 0, 0 );
|
||||
|
||||
// Lock mode switch
|
||||
XF86VidModeLockModeSwitch( _glfwLibrary.display, screen, 1 );
|
||||
|
||||
// Remember old mode and flag that we have changed the mode
|
||||
if( !_glfwWin.FS.modeChanged )
|
||||
{
|
||||
_glfwWin.FS.oldMode = *modelist[ 0 ];
|
||||
_glfwWin.FS.modeChanged = GL_TRUE;
|
||||
}
|
||||
|
||||
// Free mode list
|
||||
XFree( modelist );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Change the current video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwSetVideoMode( int screen, int *width, int *height, int *rate )
|
||||
{
|
||||
int bestmode;
|
||||
|
||||
// Find a best match mode
|
||||
bestmode = _glfwGetClosestVideoMode( screen, width, height, rate );
|
||||
|
||||
// Change mode
|
||||
_glfwSetVideoModeMODE( screen, bestmode, *rate );
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Restore the previously saved (original) video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwRestoreVideoMode( void )
|
||||
{
|
||||
if( _glfwWin.FS.modeChanged )
|
||||
{
|
||||
#if defined( _GLFW_HAS_XRANDR )
|
||||
if( _glfwLibrary.XRandR.available )
|
||||
{
|
||||
XRRScreenConfiguration *sc;
|
||||
|
||||
sc = XRRGetScreenInfo( _glfwLibrary.display, _glfwWin.root );
|
||||
|
||||
XRRSetScreenConfig( _glfwLibrary.display,
|
||||
sc,
|
||||
_glfwWin.root,
|
||||
_glfwWin.FS.oldSizeID,
|
||||
_glfwWin.FS.oldRotation,
|
||||
CurrentTime );
|
||||
|
||||
XRRFreeScreenConfigInfo( sc );
|
||||
}
|
||||
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
||||
if( _glfwLibrary.XF86VidMode.available )
|
||||
{
|
||||
// Unlock mode switch
|
||||
XF86VidModeLockModeSwitch( _glfwLibrary.display, _glfwWin.screen, 0 );
|
||||
|
||||
// Change the video mode back to the old mode
|
||||
XF86VidModeSwitchToMode( _glfwLibrary.display,
|
||||
_glfwWin.screen,
|
||||
&_glfwWin.FS.oldMode );
|
||||
}
|
||||
#endif
|
||||
_glfwWin.FS.modeChanged = GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
struct _glfwResolution
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
//========================================================================
|
||||
// List available video modes
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount )
|
||||
{
|
||||
int count, k, l, r, g, b, rgba, gl;
|
||||
int depth, screen;
|
||||
Display *dpy;
|
||||
XVisualInfo *vislist, dummy;
|
||||
int viscount, rgbcount, rescount;
|
||||
int *rgbarray;
|
||||
struct _glfwResolution *resarray;
|
||||
|
||||
// Get display and screen
|
||||
dpy = _glfwLibrary.display;
|
||||
screen = DefaultScreen( dpy );
|
||||
|
||||
// Get list of visuals
|
||||
vislist = XGetVisualInfo( dpy, 0, &dummy, &viscount );
|
||||
if( vislist == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
rgbarray = (int*) malloc( sizeof(int) * viscount );
|
||||
rgbcount = 0;
|
||||
|
||||
// Build RGB array
|
||||
for( k = 0; k < viscount; k++ )
|
||||
{
|
||||
// Does the visual support OpenGL & true color?
|
||||
glXGetConfig( dpy, &vislist[k], GLX_USE_GL, &gl );
|
||||
glXGetConfig( dpy, &vislist[k], GLX_RGBA, &rgba );
|
||||
if( gl && rgba )
|
||||
{
|
||||
// Get color depth for this visual
|
||||
depth = vislist[k].depth;
|
||||
|
||||
// Convert to RGB
|
||||
BPP2RGB( depth, &r, &g, &b );
|
||||
depth = (r<<16) | (g<<8) | b;
|
||||
|
||||
// Is this mode unique?
|
||||
for( l = 0; l < rgbcount; l++ )
|
||||
{
|
||||
if( depth == rgbarray[ l ] )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( l >= rgbcount )
|
||||
{
|
||||
rgbarray[ rgbcount ] = depth;
|
||||
rgbcount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rescount = 0;
|
||||
resarray = NULL;
|
||||
|
||||
// Build resolution array
|
||||
#if defined( _GLFW_HAS_XRANDR )
|
||||
if( _glfwLibrary.XRandR.available )
|
||||
{
|
||||
XRRScreenConfiguration *sc;
|
||||
XRRScreenSize *sizelist;
|
||||
int sizecount;
|
||||
|
||||
sc = XRRGetScreenInfo( dpy, RootWindow( dpy, screen ) );
|
||||
sizelist = XRRConfigSizes( sc, &sizecount );
|
||||
|
||||
resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * sizecount );
|
||||
|
||||
for( k = 0; k < sizecount; k++ )
|
||||
{
|
||||
resarray[ rescount ].width = sizelist[ k ].width;
|
||||
resarray[ rescount ].height = sizelist[ k ].height;
|
||||
rescount++;
|
||||
}
|
||||
|
||||
XRRFreeScreenConfigInfo( sc );
|
||||
}
|
||||
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
||||
if( _glfwLibrary.XF86VidMode.available )
|
||||
{
|
||||
XF86VidModeModeInfo **modelist;
|
||||
int modecount, width, height;
|
||||
|
||||
XF86VidModeGetAllModeLines( dpy, screen, &modecount, &modelist );
|
||||
|
||||
resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * modecount );
|
||||
|
||||
for( k = 0; k < modecount; k++ )
|
||||
{
|
||||
width = modelist[ k ]->hdisplay;
|
||||
height = modelist[ k ]->vdisplay;
|
||||
|
||||
// Is this mode unique?
|
||||
for( l = 0; l < rescount; l++ )
|
||||
{
|
||||
if( width == resarray[ l ].width && height == resarray[ l ].height )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( l >= rescount )
|
||||
{
|
||||
resarray[ rescount ].width = width;
|
||||
resarray[ rescount ].height = height;
|
||||
rescount++;
|
||||
}
|
||||
}
|
||||
|
||||
XFree( modelist );
|
||||
}
|
||||
#endif
|
||||
|
||||
if( !resarray )
|
||||
{
|
||||
rescount = 1;
|
||||
resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * rescount );
|
||||
|
||||
resarray[ 0 ].width = DisplayWidth( dpy, screen );
|
||||
resarray[ 0 ].height = DisplayHeight( dpy, screen );
|
||||
}
|
||||
|
||||
// Build permutations of colors and resolutions
|
||||
count = 0;
|
||||
for( k = 0; k < rgbcount && count < maxcount; k++ )
|
||||
{
|
||||
for( l = 0; l < rescount && count < maxcount; l++ )
|
||||
{
|
||||
list[count].Width = resarray[ l ].width;
|
||||
list[count].Height = resarray[ l ].height;
|
||||
list[count].RedBits = (rgbarray[ k ] >> 16) & 255;
|
||||
list[count].GreenBits = (rgbarray[ k ] >> 8) & 255;
|
||||
list[count].BlueBits = rgbarray[ k ] & 255;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Free visuals list
|
||||
XFree( vislist );
|
||||
|
||||
free( resarray );
|
||||
free( rgbarray );
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the desktop video mode
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformGetDesktopMode( GLFWvidmode *mode )
|
||||
{
|
||||
Display *dpy;
|
||||
int bpp, screen;
|
||||
|
||||
// Get display and screen
|
||||
dpy = _glfwLibrary.display;
|
||||
screen = DefaultScreen( dpy );
|
||||
|
||||
// Get display depth
|
||||
bpp = DefaultDepth( dpy, screen );
|
||||
|
||||
// Convert BPP to RGB bits
|
||||
BPP2RGB( bpp, &mode->RedBits, &mode->GreenBits, &mode->BlueBits );
|
||||
|
||||
#if defined( _GLFW_HAS_XRANDR )
|
||||
if( _glfwLibrary.XRandR.available )
|
||||
{
|
||||
if( _glfwWin.FS.modeChanged )
|
||||
{
|
||||
mode->Width = _glfwWin.FS.oldWidth;
|
||||
mode->Height = _glfwWin.FS.oldHeight;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
||||
if( _glfwLibrary.XF86VidMode.available )
|
||||
{
|
||||
XF86VidModeModeInfo **modelist;
|
||||
int modecount;
|
||||
|
||||
if( _glfwWin.FS.modeChanged )
|
||||
{
|
||||
// The old (desktop) mode is stored in _glfwWin.FS.oldMode
|
||||
mode->Width = _glfwWin.FS.oldMode.hdisplay;
|
||||
mode->Height = _glfwWin.FS.oldMode.vdisplay;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use the XF86VidMode extension to get list of video modes
|
||||
XF86VidModeGetAllModeLines( dpy, screen, &modecount,
|
||||
&modelist );
|
||||
|
||||
// The first mode in the list is the current (desktio) mode
|
||||
mode->Width = modelist[ 0 ]->hdisplay;
|
||||
mode->Height = modelist[ 0 ]->vdisplay;
|
||||
|
||||
// Free list
|
||||
XFree( modelist );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Get current display width and height
|
||||
mode->Width = DisplayWidth( dpy, screen );
|
||||
mode->Height = DisplayHeight( dpy, screen );
|
||||
}
|
||||
|
||||
89
ogl_editor/external/glfw/lib/x11/x11_glext.c
vendored
Normal file
89
ogl_editor/external/glfw/lib/x11/x11_glext.c
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
void (*glXGetProcAddress(const GLubyte *procName))();
|
||||
void (*glXGetProcAddressARB(const GLubyte *procName))();
|
||||
void (*glXGetProcAddressEXT(const GLubyte *procName))();
|
||||
|
||||
// We support four different ways for getting addresses for GL/GLX
|
||||
// extension functions: glXGetProcAddress, glXGetProcAddressARB,
|
||||
// glXGetProcAddressEXT, and dlsym
|
||||
#if defined( _GLFW_HAS_GLXGETPROCADDRESSARB )
|
||||
#define _glfw_glXGetProcAddress(x) glXGetProcAddressARB(x)
|
||||
#elif defined( _GLFW_HAS_GLXGETPROCADDRESS )
|
||||
#define _glfw_glXGetProcAddress(x) glXGetProcAddress(x)
|
||||
#elif defined( _GLFW_HAS_GLXGETPROCADDRESSEXT )
|
||||
#define _glfw_glXGetProcAddress(x) glXGetProcAddressEXT(x)
|
||||
#elif defined( _GLFW_HAS_DLOPEN )
|
||||
#define _glfw_glXGetProcAddress(x) dlsym(_glfwLibrary.Libs.libGL,x)
|
||||
#else
|
||||
#define _glfw_glXGetProcAddress(x) NULL
|
||||
#endif
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Check if an OpenGL extension is available at runtime
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformExtensionSupported( const char *extension )
|
||||
{
|
||||
const GLubyte *extensions;
|
||||
|
||||
// Get list of GLX extensions
|
||||
extensions = (const GLubyte*) glXQueryExtensionsString( _glfwLibrary.display,
|
||||
_glfwWin.screen );
|
||||
if( extensions != NULL )
|
||||
{
|
||||
if( _glfwStringInExtensionString( extension, extensions ) )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get the function pointer to an OpenGL function
|
||||
//========================================================================
|
||||
|
||||
void * _glfwPlatformGetProcAddress( const char *procname )
|
||||
{
|
||||
return (void *) _glfw_glXGetProcAddress( (const GLubyte *) procname );
|
||||
}
|
||||
|
||||
288
ogl_editor/external/glfw/lib/x11/x11_init.c
vendored
Normal file
288
ogl_editor/external/glfw/lib/x11/x11_init.c
vendored
Normal file
@ -0,0 +1,288 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialize GLFW thread package
|
||||
//========================================================================
|
||||
|
||||
static void initThreads( void )
|
||||
{
|
||||
// Initialize critical section handle
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
(void) pthread_mutex_init( &_glfwThrd.CriticalSection, NULL );
|
||||
#endif
|
||||
|
||||
// The first thread (the main thread) has ID 0
|
||||
_glfwThrd.NextID = 0;
|
||||
|
||||
// Fill out information about the main thread (this thread)
|
||||
_glfwThrd.First.ID = _glfwThrd.NextID++;
|
||||
_glfwThrd.First.Function = NULL;
|
||||
_glfwThrd.First.Previous = NULL;
|
||||
_glfwThrd.First.Next = NULL;
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
_glfwThrd.First.PosixID = pthread_self();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Terminate GLFW thread package
|
||||
//========================================================================
|
||||
|
||||
static void terminateThreads( void )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
_GLFWthread *t, *t_next;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Kill all threads (NOTE: THE USER SHOULD WAIT FOR ALL THREADS TO
|
||||
// DIE, _BEFORE_ CALLING glfwTerminate()!!!)
|
||||
t = _glfwThrd.First.Next;
|
||||
while( t != NULL )
|
||||
{
|
||||
// Get pointer to next thread
|
||||
t_next = t->Next;
|
||||
|
||||
// Simply murder the process, no mercy!
|
||||
pthread_kill( t->PosixID, SIGKILL );
|
||||
|
||||
// Free memory allocated for this thread
|
||||
free( (void *) t );
|
||||
|
||||
// Select next thread in list
|
||||
t = t_next;
|
||||
}
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Delete critical section handle
|
||||
pthread_mutex_destroy( &_glfwThrd.CriticalSection );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Dynamically load libraries
|
||||
//========================================================================
|
||||
|
||||
static void initLibraries( void )
|
||||
{
|
||||
#ifdef _GLFW_DLOPEN_LIBGL
|
||||
int i;
|
||||
char *libGL_names[ ] =
|
||||
{
|
||||
"libGL.so",
|
||||
"libGL.so.1",
|
||||
"/usr/lib/libGL.so",
|
||||
"/usr/lib/libGL.so.1",
|
||||
NULL
|
||||
};
|
||||
|
||||
_glfwLibrary.Libs.libGL = NULL;
|
||||
for( i = 0; !libGL_names[ i ] != NULL; i ++ )
|
||||
{
|
||||
_glfwLibrary.Libs.libGL = dlopen( libGL_names[ i ],
|
||||
RTLD_LAZY | RTLD_GLOBAL );
|
||||
if( _glfwLibrary.Libs.libGL )
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Terminate GLFW when exiting application
|
||||
//========================================================================
|
||||
|
||||
static void glfw_atexit( void )
|
||||
{
|
||||
glfwTerminate();
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Initialize X11 display
|
||||
//========================================================================
|
||||
|
||||
static int initDisplay( void )
|
||||
{
|
||||
// Open display
|
||||
_glfwLibrary.display = XOpenDisplay( 0 );
|
||||
if( !_glfwLibrary.display )
|
||||
{
|
||||
fprintf(stderr, "Failed to open X display\n");
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Check for XF86VidMode extension
|
||||
#ifdef _GLFW_HAS_XF86VIDMODE
|
||||
_glfwLibrary.XF86VidMode.available =
|
||||
XF86VidModeQueryExtension( _glfwLibrary.display,
|
||||
&_glfwLibrary.XF86VidMode.eventBase,
|
||||
&_glfwLibrary.XF86VidMode.errorBase);
|
||||
#else
|
||||
_glfwLibrary.XF86VidMode.available = 0;
|
||||
#endif
|
||||
|
||||
// Check for XRandR extension
|
||||
#ifdef _GLFW_HAS_XRANDR
|
||||
_glfwLibrary.XRandR.available =
|
||||
XRRQueryExtension( _glfwLibrary.display,
|
||||
&_glfwLibrary.XRandR.eventBase,
|
||||
&_glfwLibrary.XRandR.errorBase );
|
||||
#else
|
||||
_glfwLibrary.XRandR.available = 0;
|
||||
#endif
|
||||
|
||||
// Fullscreen & screen saver settings
|
||||
// Check if GLX is supported on this display
|
||||
if( !glXQueryExtension( _glfwLibrary.display, NULL, NULL ) )
|
||||
{
|
||||
fprintf(stderr, "GLX not supported\n");
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Retrieve GLX version
|
||||
if( !glXQueryVersion( _glfwLibrary.display,
|
||||
&_glfwLibrary.glxMajor,
|
||||
&_glfwLibrary.glxMinor ) )
|
||||
{
|
||||
fprintf(stderr, "Unable to query GLX version\n");
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Terminate X11 display
|
||||
//========================================================================
|
||||
|
||||
static void terminateDisplay( void )
|
||||
{
|
||||
// Open display
|
||||
if( _glfwLibrary.display )
|
||||
{
|
||||
XCloseDisplay( _glfwLibrary.display );
|
||||
_glfwLibrary.display = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Initialize various GLFW state
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformInit( void )
|
||||
{
|
||||
// Initialize display
|
||||
if( !initDisplay() )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Initialize thread package
|
||||
initThreads();
|
||||
|
||||
// Try to load libGL.so if necessary
|
||||
initLibraries();
|
||||
|
||||
_glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode );
|
||||
|
||||
// Install atexit() routine
|
||||
atexit( glfw_atexit );
|
||||
|
||||
// Initialize joysticks
|
||||
_glfwInitJoysticks();
|
||||
|
||||
// Start the timer
|
||||
_glfwInitTimer();
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Close window and kill all threads
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformTerminate( void )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
// Only the main thread is allowed to do this...
|
||||
if( pthread_self() != _glfwThrd.First.PosixID )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
|
||||
// Close OpenGL window
|
||||
glfwCloseWindow();
|
||||
|
||||
// Kill thread package
|
||||
terminateThreads();
|
||||
|
||||
// Terminate display
|
||||
terminateDisplay();
|
||||
|
||||
// Terminate joysticks
|
||||
_glfwTerminateJoysticks();
|
||||
|
||||
// Unload libGL.so if necessary
|
||||
#ifdef _GLFW_DLOPEN_LIBGL
|
||||
if( _glfwLibrary.Libs.libGL != NULL )
|
||||
{
|
||||
dlclose( _glfwLibrary.Libs.libGL );
|
||||
_glfwLibrary.Libs.libGL = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
367
ogl_editor/external/glfw/lib/x11/x11_joystick.c
vendored
Normal file
367
ogl_editor/external/glfw/lib/x11/x11_joystick.c
vendored
Normal file
@ -0,0 +1,367 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Note: Only Linux joystick input is supported at the moment. Other
|
||||
// systems will behave as if there are no joysticks connected.
|
||||
//========================================================================
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
#ifdef _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Here are the Linux joystick driver v1.x interface definitions that we
|
||||
// use (we do not want to rely on <linux/joystick.h>):
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
// Joystick event types
|
||||
#define JS_EVENT_BUTTON 0x01 /* button pressed/released */
|
||||
#define JS_EVENT_AXIS 0x02 /* joystick moved */
|
||||
#define JS_EVENT_INIT 0x80 /* initial state of device */
|
||||
|
||||
// Joystick event structure
|
||||
struct js_event {
|
||||
unsigned int time; /* (u32) event timestamp in milliseconds */
|
||||
signed short value; /* (s16) value */
|
||||
unsigned char type; /* (u8) event type */
|
||||
unsigned char number; /* (u8) axis/button number */
|
||||
};
|
||||
|
||||
// Joystick IOCTL commands
|
||||
#define JSIOCGVERSION _IOR('j', 0x01, int) /* get driver version (u32) */
|
||||
#define JSIOCGAXES _IOR('j', 0x11, char) /* get number of axes (u8) */
|
||||
#define JSIOCGBUTTONS _IOR('j', 0x12, char) /* get number of buttons (u8) */
|
||||
|
||||
#endif // _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Initialize joystick interface
|
||||
//========================================================================
|
||||
|
||||
void _glfwInitJoysticks( void )
|
||||
{
|
||||
#ifdef _GLFW_USE_LINUX_JOYSTICKS
|
||||
int k, n, fd, joy_count;
|
||||
char *joy_base_name, joy_dev_name[ 20 ];
|
||||
int driver_version = 0x000800;
|
||||
char ret_data;
|
||||
#endif // _GLFW_USE_LINUX_JOYSTICKS
|
||||
int i;
|
||||
|
||||
// Start by saying that there are no sticks
|
||||
for( i = 0; i <= GLFW_JOYSTICK_LAST; ++ i )
|
||||
{
|
||||
_glfwJoy[ i ].Present = GL_FALSE;
|
||||
}
|
||||
|
||||
#ifdef _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
// Try to open joysticks (nonblocking)
|
||||
joy_count = 0;
|
||||
for( k = 0; k <= 1 && joy_count <= GLFW_JOYSTICK_LAST; ++ k )
|
||||
{
|
||||
// Pick joystick base name
|
||||
switch( k )
|
||||
{
|
||||
case 0:
|
||||
joy_base_name = "/dev/input/js"; // USB sticks
|
||||
break;
|
||||
case 1:
|
||||
joy_base_name = "/dev/js"; // "Legacy" sticks
|
||||
break;
|
||||
default:
|
||||
continue; // (should never happen)
|
||||
}
|
||||
|
||||
// Try to open a few of these sticks
|
||||
for( i = 0; i <= 50 && joy_count <= GLFW_JOYSTICK_LAST; ++ i )
|
||||
{
|
||||
sprintf( joy_dev_name, "%s%d", joy_base_name, i );
|
||||
fd = open( joy_dev_name, O_NONBLOCK );
|
||||
if( fd != -1 )
|
||||
{
|
||||
// Remember fd
|
||||
_glfwJoy[ joy_count ].fd = fd;
|
||||
|
||||
// Check that the joystick driver version is 1.0+
|
||||
ioctl( fd, JSIOCGVERSION, &driver_version );
|
||||
if( driver_version < 0x010000 )
|
||||
{
|
||||
// It's an old 0.x interface (we don't support it)
|
||||
close( fd );
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get number of joystick axes
|
||||
ioctl( fd, JSIOCGAXES, &ret_data );
|
||||
_glfwJoy[ joy_count ].NumAxes = (int) ret_data;
|
||||
|
||||
// Get number of joystick buttons
|
||||
ioctl( fd, JSIOCGBUTTONS, &ret_data );
|
||||
_glfwJoy[ joy_count ].NumButtons = (int) ret_data;
|
||||
|
||||
// Allocate memory for joystick state
|
||||
_glfwJoy[ joy_count ].Axis =
|
||||
(float *) malloc( sizeof(float) *
|
||||
_glfwJoy[ joy_count ].NumAxes );
|
||||
if( _glfwJoy[ joy_count ].Axis == NULL )
|
||||
{
|
||||
close( fd );
|
||||
continue;
|
||||
}
|
||||
_glfwJoy[ joy_count ].Button =
|
||||
(unsigned char *) malloc( sizeof(char) *
|
||||
_glfwJoy[ joy_count ].NumButtons );
|
||||
if( _glfwJoy[ joy_count ].Button == NULL )
|
||||
{
|
||||
free( _glfwJoy[ joy_count ].Axis );
|
||||
close( fd );
|
||||
continue;
|
||||
}
|
||||
|
||||
// Clear joystick state
|
||||
for( n = 0; n < _glfwJoy[ joy_count ].NumAxes; ++ n )
|
||||
{
|
||||
_glfwJoy[ joy_count ].Axis[ n ] = 0.0f;
|
||||
}
|
||||
for( n = 0; n < _glfwJoy[ joy_count ].NumButtons; ++ n )
|
||||
{
|
||||
_glfwJoy[ joy_count ].Button[ n ] = GLFW_RELEASE;
|
||||
}
|
||||
|
||||
// The joystick is supported and connected
|
||||
_glfwJoy[ joy_count ].Present = GL_TRUE;
|
||||
joy_count ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Close all opened joystick handles
|
||||
//========================================================================
|
||||
|
||||
void _glfwTerminateJoysticks( void )
|
||||
{
|
||||
|
||||
#ifdef _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
int i;
|
||||
|
||||
// Close any opened joysticks
|
||||
for( i = 0; i <= GLFW_JOYSTICK_LAST; ++ i )
|
||||
{
|
||||
if( _glfwJoy[ i ].Present )
|
||||
{
|
||||
close( _glfwJoy[ i ].fd );
|
||||
free( _glfwJoy[ i ].Axis );
|
||||
free( _glfwJoy[ i ].Button );
|
||||
_glfwJoy[ i ].Present = GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Empty joystick event queue
|
||||
//========================================================================
|
||||
|
||||
static void pollJoystickEvents( void )
|
||||
{
|
||||
|
||||
#ifdef _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
struct js_event e;
|
||||
int i;
|
||||
|
||||
// Get joystick events for all GLFW joysticks
|
||||
for( i = 0; i <= GLFW_JOYSTICK_LAST; ++ i )
|
||||
{
|
||||
// Is the stick present?
|
||||
if( _glfwJoy[ i ].Present )
|
||||
{
|
||||
// Read all queued events (non-blocking)
|
||||
while( read(_glfwJoy[i].fd, &e, sizeof(struct js_event)) > 0 )
|
||||
{
|
||||
// We don't care if it's an init event or not
|
||||
e.type &= ~JS_EVENT_INIT;
|
||||
|
||||
// Check event type
|
||||
switch( e.type )
|
||||
{
|
||||
case JS_EVENT_AXIS:
|
||||
_glfwJoy[ i ].Axis[ e.number ] = (float) e.value /
|
||||
32767.0f;
|
||||
// We need to change the sign for the Y axes, so that
|
||||
// positive = up/forward, according to the GLFW spec.
|
||||
if( e.number & 1 )
|
||||
{
|
||||
_glfwJoy[ i ].Axis[ e.number ] =
|
||||
-_glfwJoy[ i ].Axis[ e.number ];
|
||||
}
|
||||
break;
|
||||
|
||||
case JS_EVENT_BUTTON:
|
||||
_glfwJoy[ i ].Button[ e.number ] =
|
||||
e.value ? GLFW_PRESS : GLFW_RELEASE;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // _GLFW_USE_LINUX_JOYSTICKS
|
||||
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Determine joystick capabilities
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickParam( int joy, int param )
|
||||
{
|
||||
// Is joystick present?
|
||||
if( !_glfwJoy[ joy ].Present )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch( param )
|
||||
{
|
||||
case GLFW_PRESENT:
|
||||
return GL_TRUE;
|
||||
|
||||
case GLFW_AXES:
|
||||
return _glfwJoy[ joy ].NumAxes;
|
||||
|
||||
case GLFW_BUTTONS:
|
||||
return _glfwJoy[ joy ].NumButtons;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick axis positions
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes )
|
||||
{
|
||||
int i;
|
||||
|
||||
// Is joystick present?
|
||||
if( !_glfwJoy[ joy ].Present )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Update joystick state
|
||||
pollJoystickEvents();
|
||||
|
||||
// Does the joystick support less axes than requested?
|
||||
if( _glfwJoy[ joy ].NumAxes < numaxes )
|
||||
{
|
||||
numaxes = _glfwJoy[ joy ].NumAxes;
|
||||
}
|
||||
|
||||
// Copy axis positions from internal state
|
||||
for( i = 0; i < numaxes; ++ i )
|
||||
{
|
||||
pos[ i ] = _glfwJoy[ joy ].Axis[ i ];
|
||||
}
|
||||
|
||||
return numaxes;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Get joystick button states
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons,
|
||||
int numbuttons )
|
||||
{
|
||||
int i;
|
||||
|
||||
// Is joystick present?
|
||||
if( !_glfwJoy[ joy ].Present )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Update joystick state
|
||||
pollJoystickEvents();
|
||||
|
||||
// Does the joystick support less buttons than requested?
|
||||
if( _glfwJoy[ joy ].NumButtons < numbuttons )
|
||||
{
|
||||
numbuttons = _glfwJoy[ joy ].NumButtons;
|
||||
}
|
||||
|
||||
// Copy button states from internal state
|
||||
for( i = 0; i < numbuttons; ++ i )
|
||||
{
|
||||
buttons[ i ] = _glfwJoy[ joy ].Button[ i ];
|
||||
}
|
||||
|
||||
return numbuttons;
|
||||
}
|
||||
|
||||
901
ogl_editor/external/glfw/lib/x11/x11_keysym2unicode.c
vendored
Normal file
901
ogl_editor/external/glfw/lib/x11/x11_keysym2unicode.c
vendored
Normal file
@ -0,0 +1,901 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
/*
|
||||
* Marcus: This code was originally written by Markus G. Kuhn.
|
||||
* I have made some slight changes (trimmed it down a bit from >60 KB to
|
||||
* 20 KB), but the functionality is the same.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This module converts keysym values into the corresponding ISO 10646
|
||||
* (UCS, Unicode) values.
|
||||
*
|
||||
* The array keysymtab[] contains pairs of X11 keysym values for graphical
|
||||
* characters and the corresponding Unicode value. The function
|
||||
* _glfwKeySym2Unicode() maps a keysym onto a Unicode value using a binary
|
||||
* search, therefore keysymtab[] must remain SORTED by keysym value.
|
||||
*
|
||||
* We allow to represent any UCS character in the range U-00000000 to
|
||||
* U-00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff.
|
||||
* This admittedly does not cover the entire 31-bit space of UCS, but
|
||||
* it does cover all of the characters up to U-10FFFF, which can be
|
||||
* represented by UTF-16, and more, and it is very unlikely that higher
|
||||
* UCS codes will ever be assigned by ISO. So to get Unicode character
|
||||
* U+ABCD you can directly use keysym 0x0100abcd.
|
||||
*
|
||||
* Original author: Markus G. Kuhn <mkuhn@acm.org>, University of
|
||||
* Cambridge, April 2001
|
||||
*
|
||||
* Special thanks to Richard Verhoeven <river@win.tue.nl> for preparing
|
||||
* an initial draft of the mapping table.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** KeySym to Unicode mapping table ****
|
||||
//************************************************************************
|
||||
|
||||
static struct codepair {
|
||||
unsigned short keysym;
|
||||
unsigned short ucs;
|
||||
} keysymtab[] = {
|
||||
{ 0x01a1, 0x0104 },
|
||||
{ 0x01a2, 0x02d8 },
|
||||
{ 0x01a3, 0x0141 },
|
||||
{ 0x01a5, 0x013d },
|
||||
{ 0x01a6, 0x015a },
|
||||
{ 0x01a9, 0x0160 },
|
||||
{ 0x01aa, 0x015e },
|
||||
{ 0x01ab, 0x0164 },
|
||||
{ 0x01ac, 0x0179 },
|
||||
{ 0x01ae, 0x017d },
|
||||
{ 0x01af, 0x017b },
|
||||
{ 0x01b1, 0x0105 },
|
||||
{ 0x01b2, 0x02db },
|
||||
{ 0x01b3, 0x0142 },
|
||||
{ 0x01b5, 0x013e },
|
||||
{ 0x01b6, 0x015b },
|
||||
{ 0x01b7, 0x02c7 },
|
||||
{ 0x01b9, 0x0161 },
|
||||
{ 0x01ba, 0x015f },
|
||||
{ 0x01bb, 0x0165 },
|
||||
{ 0x01bc, 0x017a },
|
||||
{ 0x01bd, 0x02dd },
|
||||
{ 0x01be, 0x017e },
|
||||
{ 0x01bf, 0x017c },
|
||||
{ 0x01c0, 0x0154 },
|
||||
{ 0x01c3, 0x0102 },
|
||||
{ 0x01c5, 0x0139 },
|
||||
{ 0x01c6, 0x0106 },
|
||||
{ 0x01c8, 0x010c },
|
||||
{ 0x01ca, 0x0118 },
|
||||
{ 0x01cc, 0x011a },
|
||||
{ 0x01cf, 0x010e },
|
||||
{ 0x01d0, 0x0110 },
|
||||
{ 0x01d1, 0x0143 },
|
||||
{ 0x01d2, 0x0147 },
|
||||
{ 0x01d5, 0x0150 },
|
||||
{ 0x01d8, 0x0158 },
|
||||
{ 0x01d9, 0x016e },
|
||||
{ 0x01db, 0x0170 },
|
||||
{ 0x01de, 0x0162 },
|
||||
{ 0x01e0, 0x0155 },
|
||||
{ 0x01e3, 0x0103 },
|
||||
{ 0x01e5, 0x013a },
|
||||
{ 0x01e6, 0x0107 },
|
||||
{ 0x01e8, 0x010d },
|
||||
{ 0x01ea, 0x0119 },
|
||||
{ 0x01ec, 0x011b },
|
||||
{ 0x01ef, 0x010f },
|
||||
{ 0x01f0, 0x0111 },
|
||||
{ 0x01f1, 0x0144 },
|
||||
{ 0x01f2, 0x0148 },
|
||||
{ 0x01f5, 0x0151 },
|
||||
{ 0x01f8, 0x0159 },
|
||||
{ 0x01f9, 0x016f },
|
||||
{ 0x01fb, 0x0171 },
|
||||
{ 0x01fe, 0x0163 },
|
||||
{ 0x01ff, 0x02d9 },
|
||||
{ 0x02a1, 0x0126 },
|
||||
{ 0x02a6, 0x0124 },
|
||||
{ 0x02a9, 0x0130 },
|
||||
{ 0x02ab, 0x011e },
|
||||
{ 0x02ac, 0x0134 },
|
||||
{ 0x02b1, 0x0127 },
|
||||
{ 0x02b6, 0x0125 },
|
||||
{ 0x02b9, 0x0131 },
|
||||
{ 0x02bb, 0x011f },
|
||||
{ 0x02bc, 0x0135 },
|
||||
{ 0x02c5, 0x010a },
|
||||
{ 0x02c6, 0x0108 },
|
||||
{ 0x02d5, 0x0120 },
|
||||
{ 0x02d8, 0x011c },
|
||||
{ 0x02dd, 0x016c },
|
||||
{ 0x02de, 0x015c },
|
||||
{ 0x02e5, 0x010b },
|
||||
{ 0x02e6, 0x0109 },
|
||||
{ 0x02f5, 0x0121 },
|
||||
{ 0x02f8, 0x011d },
|
||||
{ 0x02fd, 0x016d },
|
||||
{ 0x02fe, 0x015d },
|
||||
{ 0x03a2, 0x0138 },
|
||||
{ 0x03a3, 0x0156 },
|
||||
{ 0x03a5, 0x0128 },
|
||||
{ 0x03a6, 0x013b },
|
||||
{ 0x03aa, 0x0112 },
|
||||
{ 0x03ab, 0x0122 },
|
||||
{ 0x03ac, 0x0166 },
|
||||
{ 0x03b3, 0x0157 },
|
||||
{ 0x03b5, 0x0129 },
|
||||
{ 0x03b6, 0x013c },
|
||||
{ 0x03ba, 0x0113 },
|
||||
{ 0x03bb, 0x0123 },
|
||||
{ 0x03bc, 0x0167 },
|
||||
{ 0x03bd, 0x014a },
|
||||
{ 0x03bf, 0x014b },
|
||||
{ 0x03c0, 0x0100 },
|
||||
{ 0x03c7, 0x012e },
|
||||
{ 0x03cc, 0x0116 },
|
||||
{ 0x03cf, 0x012a },
|
||||
{ 0x03d1, 0x0145 },
|
||||
{ 0x03d2, 0x014c },
|
||||
{ 0x03d3, 0x0136 },
|
||||
{ 0x03d9, 0x0172 },
|
||||
{ 0x03dd, 0x0168 },
|
||||
{ 0x03de, 0x016a },
|
||||
{ 0x03e0, 0x0101 },
|
||||
{ 0x03e7, 0x012f },
|
||||
{ 0x03ec, 0x0117 },
|
||||
{ 0x03ef, 0x012b },
|
||||
{ 0x03f1, 0x0146 },
|
||||
{ 0x03f2, 0x014d },
|
||||
{ 0x03f3, 0x0137 },
|
||||
{ 0x03f9, 0x0173 },
|
||||
{ 0x03fd, 0x0169 },
|
||||
{ 0x03fe, 0x016b },
|
||||
{ 0x047e, 0x203e },
|
||||
{ 0x04a1, 0x3002 },
|
||||
{ 0x04a2, 0x300c },
|
||||
{ 0x04a3, 0x300d },
|
||||
{ 0x04a4, 0x3001 },
|
||||
{ 0x04a5, 0x30fb },
|
||||
{ 0x04a6, 0x30f2 },
|
||||
{ 0x04a7, 0x30a1 },
|
||||
{ 0x04a8, 0x30a3 },
|
||||
{ 0x04a9, 0x30a5 },
|
||||
{ 0x04aa, 0x30a7 },
|
||||
{ 0x04ab, 0x30a9 },
|
||||
{ 0x04ac, 0x30e3 },
|
||||
{ 0x04ad, 0x30e5 },
|
||||
{ 0x04ae, 0x30e7 },
|
||||
{ 0x04af, 0x30c3 },
|
||||
{ 0x04b0, 0x30fc },
|
||||
{ 0x04b1, 0x30a2 },
|
||||
{ 0x04b2, 0x30a4 },
|
||||
{ 0x04b3, 0x30a6 },
|
||||
{ 0x04b4, 0x30a8 },
|
||||
{ 0x04b5, 0x30aa },
|
||||
{ 0x04b6, 0x30ab },
|
||||
{ 0x04b7, 0x30ad },
|
||||
{ 0x04b8, 0x30af },
|
||||
{ 0x04b9, 0x30b1 },
|
||||
{ 0x04ba, 0x30b3 },
|
||||
{ 0x04bb, 0x30b5 },
|
||||
{ 0x04bc, 0x30b7 },
|
||||
{ 0x04bd, 0x30b9 },
|
||||
{ 0x04be, 0x30bb },
|
||||
{ 0x04bf, 0x30bd },
|
||||
{ 0x04c0, 0x30bf },
|
||||
{ 0x04c1, 0x30c1 },
|
||||
{ 0x04c2, 0x30c4 },
|
||||
{ 0x04c3, 0x30c6 },
|
||||
{ 0x04c4, 0x30c8 },
|
||||
{ 0x04c5, 0x30ca },
|
||||
{ 0x04c6, 0x30cb },
|
||||
{ 0x04c7, 0x30cc },
|
||||
{ 0x04c8, 0x30cd },
|
||||
{ 0x04c9, 0x30ce },
|
||||
{ 0x04ca, 0x30cf },
|
||||
{ 0x04cb, 0x30d2 },
|
||||
{ 0x04cc, 0x30d5 },
|
||||
{ 0x04cd, 0x30d8 },
|
||||
{ 0x04ce, 0x30db },
|
||||
{ 0x04cf, 0x30de },
|
||||
{ 0x04d0, 0x30df },
|
||||
{ 0x04d1, 0x30e0 },
|
||||
{ 0x04d2, 0x30e1 },
|
||||
{ 0x04d3, 0x30e2 },
|
||||
{ 0x04d4, 0x30e4 },
|
||||
{ 0x04d5, 0x30e6 },
|
||||
{ 0x04d6, 0x30e8 },
|
||||
{ 0x04d7, 0x30e9 },
|
||||
{ 0x04d8, 0x30ea },
|
||||
{ 0x04d9, 0x30eb },
|
||||
{ 0x04da, 0x30ec },
|
||||
{ 0x04db, 0x30ed },
|
||||
{ 0x04dc, 0x30ef },
|
||||
{ 0x04dd, 0x30f3 },
|
||||
{ 0x04de, 0x309b },
|
||||
{ 0x04df, 0x309c },
|
||||
{ 0x05ac, 0x060c },
|
||||
{ 0x05bb, 0x061b },
|
||||
{ 0x05bf, 0x061f },
|
||||
{ 0x05c1, 0x0621 },
|
||||
{ 0x05c2, 0x0622 },
|
||||
{ 0x05c3, 0x0623 },
|
||||
{ 0x05c4, 0x0624 },
|
||||
{ 0x05c5, 0x0625 },
|
||||
{ 0x05c6, 0x0626 },
|
||||
{ 0x05c7, 0x0627 },
|
||||
{ 0x05c8, 0x0628 },
|
||||
{ 0x05c9, 0x0629 },
|
||||
{ 0x05ca, 0x062a },
|
||||
{ 0x05cb, 0x062b },
|
||||
{ 0x05cc, 0x062c },
|
||||
{ 0x05cd, 0x062d },
|
||||
{ 0x05ce, 0x062e },
|
||||
{ 0x05cf, 0x062f },
|
||||
{ 0x05d0, 0x0630 },
|
||||
{ 0x05d1, 0x0631 },
|
||||
{ 0x05d2, 0x0632 },
|
||||
{ 0x05d3, 0x0633 },
|
||||
{ 0x05d4, 0x0634 },
|
||||
{ 0x05d5, 0x0635 },
|
||||
{ 0x05d6, 0x0636 },
|
||||
{ 0x05d7, 0x0637 },
|
||||
{ 0x05d8, 0x0638 },
|
||||
{ 0x05d9, 0x0639 },
|
||||
{ 0x05da, 0x063a },
|
||||
{ 0x05e0, 0x0640 },
|
||||
{ 0x05e1, 0x0641 },
|
||||
{ 0x05e2, 0x0642 },
|
||||
{ 0x05e3, 0x0643 },
|
||||
{ 0x05e4, 0x0644 },
|
||||
{ 0x05e5, 0x0645 },
|
||||
{ 0x05e6, 0x0646 },
|
||||
{ 0x05e7, 0x0647 },
|
||||
{ 0x05e8, 0x0648 },
|
||||
{ 0x05e9, 0x0649 },
|
||||
{ 0x05ea, 0x064a },
|
||||
{ 0x05eb, 0x064b },
|
||||
{ 0x05ec, 0x064c },
|
||||
{ 0x05ed, 0x064d },
|
||||
{ 0x05ee, 0x064e },
|
||||
{ 0x05ef, 0x064f },
|
||||
{ 0x05f0, 0x0650 },
|
||||
{ 0x05f1, 0x0651 },
|
||||
{ 0x05f2, 0x0652 },
|
||||
{ 0x06a1, 0x0452 },
|
||||
{ 0x06a2, 0x0453 },
|
||||
{ 0x06a3, 0x0451 },
|
||||
{ 0x06a4, 0x0454 },
|
||||
{ 0x06a5, 0x0455 },
|
||||
{ 0x06a6, 0x0456 },
|
||||
{ 0x06a7, 0x0457 },
|
||||
{ 0x06a8, 0x0458 },
|
||||
{ 0x06a9, 0x0459 },
|
||||
{ 0x06aa, 0x045a },
|
||||
{ 0x06ab, 0x045b },
|
||||
{ 0x06ac, 0x045c },
|
||||
{ 0x06ae, 0x045e },
|
||||
{ 0x06af, 0x045f },
|
||||
{ 0x06b0, 0x2116 },
|
||||
{ 0x06b1, 0x0402 },
|
||||
{ 0x06b2, 0x0403 },
|
||||
{ 0x06b3, 0x0401 },
|
||||
{ 0x06b4, 0x0404 },
|
||||
{ 0x06b5, 0x0405 },
|
||||
{ 0x06b6, 0x0406 },
|
||||
{ 0x06b7, 0x0407 },
|
||||
{ 0x06b8, 0x0408 },
|
||||
{ 0x06b9, 0x0409 },
|
||||
{ 0x06ba, 0x040a },
|
||||
{ 0x06bb, 0x040b },
|
||||
{ 0x06bc, 0x040c },
|
||||
{ 0x06be, 0x040e },
|
||||
{ 0x06bf, 0x040f },
|
||||
{ 0x06c0, 0x044e },
|
||||
{ 0x06c1, 0x0430 },
|
||||
{ 0x06c2, 0x0431 },
|
||||
{ 0x06c3, 0x0446 },
|
||||
{ 0x06c4, 0x0434 },
|
||||
{ 0x06c5, 0x0435 },
|
||||
{ 0x06c6, 0x0444 },
|
||||
{ 0x06c7, 0x0433 },
|
||||
{ 0x06c8, 0x0445 },
|
||||
{ 0x06c9, 0x0438 },
|
||||
{ 0x06ca, 0x0439 },
|
||||
{ 0x06cb, 0x043a },
|
||||
{ 0x06cc, 0x043b },
|
||||
{ 0x06cd, 0x043c },
|
||||
{ 0x06ce, 0x043d },
|
||||
{ 0x06cf, 0x043e },
|
||||
{ 0x06d0, 0x043f },
|
||||
{ 0x06d1, 0x044f },
|
||||
{ 0x06d2, 0x0440 },
|
||||
{ 0x06d3, 0x0441 },
|
||||
{ 0x06d4, 0x0442 },
|
||||
{ 0x06d5, 0x0443 },
|
||||
{ 0x06d6, 0x0436 },
|
||||
{ 0x06d7, 0x0432 },
|
||||
{ 0x06d8, 0x044c },
|
||||
{ 0x06d9, 0x044b },
|
||||
{ 0x06da, 0x0437 },
|
||||
{ 0x06db, 0x0448 },
|
||||
{ 0x06dc, 0x044d },
|
||||
{ 0x06dd, 0x0449 },
|
||||
{ 0x06de, 0x0447 },
|
||||
{ 0x06df, 0x044a },
|
||||
{ 0x06e0, 0x042e },
|
||||
{ 0x06e1, 0x0410 },
|
||||
{ 0x06e2, 0x0411 },
|
||||
{ 0x06e3, 0x0426 },
|
||||
{ 0x06e4, 0x0414 },
|
||||
{ 0x06e5, 0x0415 },
|
||||
{ 0x06e6, 0x0424 },
|
||||
{ 0x06e7, 0x0413 },
|
||||
{ 0x06e8, 0x0425 },
|
||||
{ 0x06e9, 0x0418 },
|
||||
{ 0x06ea, 0x0419 },
|
||||
{ 0x06eb, 0x041a },
|
||||
{ 0x06ec, 0x041b },
|
||||
{ 0x06ed, 0x041c },
|
||||
{ 0x06ee, 0x041d },
|
||||
{ 0x06ef, 0x041e },
|
||||
{ 0x06f0, 0x041f },
|
||||
{ 0x06f1, 0x042f },
|
||||
{ 0x06f2, 0x0420 },
|
||||
{ 0x06f3, 0x0421 },
|
||||
{ 0x06f4, 0x0422 },
|
||||
{ 0x06f5, 0x0423 },
|
||||
{ 0x06f6, 0x0416 },
|
||||
{ 0x06f7, 0x0412 },
|
||||
{ 0x06f8, 0x042c },
|
||||
{ 0x06f9, 0x042b },
|
||||
{ 0x06fa, 0x0417 },
|
||||
{ 0x06fb, 0x0428 },
|
||||
{ 0x06fc, 0x042d },
|
||||
{ 0x06fd, 0x0429 },
|
||||
{ 0x06fe, 0x0427 },
|
||||
{ 0x06ff, 0x042a },
|
||||
{ 0x07a1, 0x0386 },
|
||||
{ 0x07a2, 0x0388 },
|
||||
{ 0x07a3, 0x0389 },
|
||||
{ 0x07a4, 0x038a },
|
||||
{ 0x07a5, 0x03aa },
|
||||
{ 0x07a7, 0x038c },
|
||||
{ 0x07a8, 0x038e },
|
||||
{ 0x07a9, 0x03ab },
|
||||
{ 0x07ab, 0x038f },
|
||||
{ 0x07ae, 0x0385 },
|
||||
{ 0x07af, 0x2015 },
|
||||
{ 0x07b1, 0x03ac },
|
||||
{ 0x07b2, 0x03ad },
|
||||
{ 0x07b3, 0x03ae },
|
||||
{ 0x07b4, 0x03af },
|
||||
{ 0x07b5, 0x03ca },
|
||||
{ 0x07b6, 0x0390 },
|
||||
{ 0x07b7, 0x03cc },
|
||||
{ 0x07b8, 0x03cd },
|
||||
{ 0x07b9, 0x03cb },
|
||||
{ 0x07ba, 0x03b0 },
|
||||
{ 0x07bb, 0x03ce },
|
||||
{ 0x07c1, 0x0391 },
|
||||
{ 0x07c2, 0x0392 },
|
||||
{ 0x07c3, 0x0393 },
|
||||
{ 0x07c4, 0x0394 },
|
||||
{ 0x07c5, 0x0395 },
|
||||
{ 0x07c6, 0x0396 },
|
||||
{ 0x07c7, 0x0397 },
|
||||
{ 0x07c8, 0x0398 },
|
||||
{ 0x07c9, 0x0399 },
|
||||
{ 0x07ca, 0x039a },
|
||||
{ 0x07cb, 0x039b },
|
||||
{ 0x07cc, 0x039c },
|
||||
{ 0x07cd, 0x039d },
|
||||
{ 0x07ce, 0x039e },
|
||||
{ 0x07cf, 0x039f },
|
||||
{ 0x07d0, 0x03a0 },
|
||||
{ 0x07d1, 0x03a1 },
|
||||
{ 0x07d2, 0x03a3 },
|
||||
{ 0x07d4, 0x03a4 },
|
||||
{ 0x07d5, 0x03a5 },
|
||||
{ 0x07d6, 0x03a6 },
|
||||
{ 0x07d7, 0x03a7 },
|
||||
{ 0x07d8, 0x03a8 },
|
||||
{ 0x07d9, 0x03a9 },
|
||||
{ 0x07e1, 0x03b1 },
|
||||
{ 0x07e2, 0x03b2 },
|
||||
{ 0x07e3, 0x03b3 },
|
||||
{ 0x07e4, 0x03b4 },
|
||||
{ 0x07e5, 0x03b5 },
|
||||
{ 0x07e6, 0x03b6 },
|
||||
{ 0x07e7, 0x03b7 },
|
||||
{ 0x07e8, 0x03b8 },
|
||||
{ 0x07e9, 0x03b9 },
|
||||
{ 0x07ea, 0x03ba },
|
||||
{ 0x07eb, 0x03bb },
|
||||
{ 0x07ec, 0x03bc },
|
||||
{ 0x07ed, 0x03bd },
|
||||
{ 0x07ee, 0x03be },
|
||||
{ 0x07ef, 0x03bf },
|
||||
{ 0x07f0, 0x03c0 },
|
||||
{ 0x07f1, 0x03c1 },
|
||||
{ 0x07f2, 0x03c3 },
|
||||
{ 0x07f3, 0x03c2 },
|
||||
{ 0x07f4, 0x03c4 },
|
||||
{ 0x07f5, 0x03c5 },
|
||||
{ 0x07f6, 0x03c6 },
|
||||
{ 0x07f7, 0x03c7 },
|
||||
{ 0x07f8, 0x03c8 },
|
||||
{ 0x07f9, 0x03c9 },
|
||||
{ 0x08a1, 0x23b7 },
|
||||
{ 0x08a2, 0x250c },
|
||||
{ 0x08a3, 0x2500 },
|
||||
{ 0x08a4, 0x2320 },
|
||||
{ 0x08a5, 0x2321 },
|
||||
{ 0x08a6, 0x2502 },
|
||||
{ 0x08a7, 0x23a1 },
|
||||
{ 0x08a8, 0x23a3 },
|
||||
{ 0x08a9, 0x23a4 },
|
||||
{ 0x08aa, 0x23a6 },
|
||||
{ 0x08ab, 0x239b },
|
||||
{ 0x08ac, 0x239d },
|
||||
{ 0x08ad, 0x239e },
|
||||
{ 0x08ae, 0x23a0 },
|
||||
{ 0x08af, 0x23a8 },
|
||||
{ 0x08b0, 0x23ac },
|
||||
{ 0x08bc, 0x2264 },
|
||||
{ 0x08bd, 0x2260 },
|
||||
{ 0x08be, 0x2265 },
|
||||
{ 0x08bf, 0x222b },
|
||||
{ 0x08c0, 0x2234 },
|
||||
{ 0x08c1, 0x221d },
|
||||
{ 0x08c2, 0x221e },
|
||||
{ 0x08c5, 0x2207 },
|
||||
{ 0x08c8, 0x223c },
|
||||
{ 0x08c9, 0x2243 },
|
||||
{ 0x08cd, 0x21d4 },
|
||||
{ 0x08ce, 0x21d2 },
|
||||
{ 0x08cf, 0x2261 },
|
||||
{ 0x08d6, 0x221a },
|
||||
{ 0x08da, 0x2282 },
|
||||
{ 0x08db, 0x2283 },
|
||||
{ 0x08dc, 0x2229 },
|
||||
{ 0x08dd, 0x222a },
|
||||
{ 0x08de, 0x2227 },
|
||||
{ 0x08df, 0x2228 },
|
||||
{ 0x08ef, 0x2202 },
|
||||
{ 0x08f6, 0x0192 },
|
||||
{ 0x08fb, 0x2190 },
|
||||
{ 0x08fc, 0x2191 },
|
||||
{ 0x08fd, 0x2192 },
|
||||
{ 0x08fe, 0x2193 },
|
||||
{ 0x09e0, 0x25c6 },
|
||||
{ 0x09e1, 0x2592 },
|
||||
{ 0x09e2, 0x2409 },
|
||||
{ 0x09e3, 0x240c },
|
||||
{ 0x09e4, 0x240d },
|
||||
{ 0x09e5, 0x240a },
|
||||
{ 0x09e8, 0x2424 },
|
||||
{ 0x09e9, 0x240b },
|
||||
{ 0x09ea, 0x2518 },
|
||||
{ 0x09eb, 0x2510 },
|
||||
{ 0x09ec, 0x250c },
|
||||
{ 0x09ed, 0x2514 },
|
||||
{ 0x09ee, 0x253c },
|
||||
{ 0x09ef, 0x23ba },
|
||||
{ 0x09f0, 0x23bb },
|
||||
{ 0x09f1, 0x2500 },
|
||||
{ 0x09f2, 0x23bc },
|
||||
{ 0x09f3, 0x23bd },
|
||||
{ 0x09f4, 0x251c },
|
||||
{ 0x09f5, 0x2524 },
|
||||
{ 0x09f6, 0x2534 },
|
||||
{ 0x09f7, 0x252c },
|
||||
{ 0x09f8, 0x2502 },
|
||||
{ 0x0aa1, 0x2003 },
|
||||
{ 0x0aa2, 0x2002 },
|
||||
{ 0x0aa3, 0x2004 },
|
||||
{ 0x0aa4, 0x2005 },
|
||||
{ 0x0aa5, 0x2007 },
|
||||
{ 0x0aa6, 0x2008 },
|
||||
{ 0x0aa7, 0x2009 },
|
||||
{ 0x0aa8, 0x200a },
|
||||
{ 0x0aa9, 0x2014 },
|
||||
{ 0x0aaa, 0x2013 },
|
||||
{ 0x0aae, 0x2026 },
|
||||
{ 0x0aaf, 0x2025 },
|
||||
{ 0x0ab0, 0x2153 },
|
||||
{ 0x0ab1, 0x2154 },
|
||||
{ 0x0ab2, 0x2155 },
|
||||
{ 0x0ab3, 0x2156 },
|
||||
{ 0x0ab4, 0x2157 },
|
||||
{ 0x0ab5, 0x2158 },
|
||||
{ 0x0ab6, 0x2159 },
|
||||
{ 0x0ab7, 0x215a },
|
||||
{ 0x0ab8, 0x2105 },
|
||||
{ 0x0abb, 0x2012 },
|
||||
{ 0x0abc, 0x2329 },
|
||||
{ 0x0abe, 0x232a },
|
||||
{ 0x0ac3, 0x215b },
|
||||
{ 0x0ac4, 0x215c },
|
||||
{ 0x0ac5, 0x215d },
|
||||
{ 0x0ac6, 0x215e },
|
||||
{ 0x0ac9, 0x2122 },
|
||||
{ 0x0aca, 0x2613 },
|
||||
{ 0x0acc, 0x25c1 },
|
||||
{ 0x0acd, 0x25b7 },
|
||||
{ 0x0ace, 0x25cb },
|
||||
{ 0x0acf, 0x25af },
|
||||
{ 0x0ad0, 0x2018 },
|
||||
{ 0x0ad1, 0x2019 },
|
||||
{ 0x0ad2, 0x201c },
|
||||
{ 0x0ad3, 0x201d },
|
||||
{ 0x0ad4, 0x211e },
|
||||
{ 0x0ad6, 0x2032 },
|
||||
{ 0x0ad7, 0x2033 },
|
||||
{ 0x0ad9, 0x271d },
|
||||
{ 0x0adb, 0x25ac },
|
||||
{ 0x0adc, 0x25c0 },
|
||||
{ 0x0add, 0x25b6 },
|
||||
{ 0x0ade, 0x25cf },
|
||||
{ 0x0adf, 0x25ae },
|
||||
{ 0x0ae0, 0x25e6 },
|
||||
{ 0x0ae1, 0x25ab },
|
||||
{ 0x0ae2, 0x25ad },
|
||||
{ 0x0ae3, 0x25b3 },
|
||||
{ 0x0ae4, 0x25bd },
|
||||
{ 0x0ae5, 0x2606 },
|
||||
{ 0x0ae6, 0x2022 },
|
||||
{ 0x0ae7, 0x25aa },
|
||||
{ 0x0ae8, 0x25b2 },
|
||||
{ 0x0ae9, 0x25bc },
|
||||
{ 0x0aea, 0x261c },
|
||||
{ 0x0aeb, 0x261e },
|
||||
{ 0x0aec, 0x2663 },
|
||||
{ 0x0aed, 0x2666 },
|
||||
{ 0x0aee, 0x2665 },
|
||||
{ 0x0af0, 0x2720 },
|
||||
{ 0x0af1, 0x2020 },
|
||||
{ 0x0af2, 0x2021 },
|
||||
{ 0x0af3, 0x2713 },
|
||||
{ 0x0af4, 0x2717 },
|
||||
{ 0x0af5, 0x266f },
|
||||
{ 0x0af6, 0x266d },
|
||||
{ 0x0af7, 0x2642 },
|
||||
{ 0x0af8, 0x2640 },
|
||||
{ 0x0af9, 0x260e },
|
||||
{ 0x0afa, 0x2315 },
|
||||
{ 0x0afb, 0x2117 },
|
||||
{ 0x0afc, 0x2038 },
|
||||
{ 0x0afd, 0x201a },
|
||||
{ 0x0afe, 0x201e },
|
||||
{ 0x0ba3, 0x003c },
|
||||
{ 0x0ba6, 0x003e },
|
||||
{ 0x0ba8, 0x2228 },
|
||||
{ 0x0ba9, 0x2227 },
|
||||
{ 0x0bc0, 0x00af },
|
||||
{ 0x0bc2, 0x22a5 },
|
||||
{ 0x0bc3, 0x2229 },
|
||||
{ 0x0bc4, 0x230a },
|
||||
{ 0x0bc6, 0x005f },
|
||||
{ 0x0bca, 0x2218 },
|
||||
{ 0x0bcc, 0x2395 },
|
||||
{ 0x0bce, 0x22a4 },
|
||||
{ 0x0bcf, 0x25cb },
|
||||
{ 0x0bd3, 0x2308 },
|
||||
{ 0x0bd6, 0x222a },
|
||||
{ 0x0bd8, 0x2283 },
|
||||
{ 0x0bda, 0x2282 },
|
||||
{ 0x0bdc, 0x22a2 },
|
||||
{ 0x0bfc, 0x22a3 },
|
||||
{ 0x0cdf, 0x2017 },
|
||||
{ 0x0ce0, 0x05d0 },
|
||||
{ 0x0ce1, 0x05d1 },
|
||||
{ 0x0ce2, 0x05d2 },
|
||||
{ 0x0ce3, 0x05d3 },
|
||||
{ 0x0ce4, 0x05d4 },
|
||||
{ 0x0ce5, 0x05d5 },
|
||||
{ 0x0ce6, 0x05d6 },
|
||||
{ 0x0ce7, 0x05d7 },
|
||||
{ 0x0ce8, 0x05d8 },
|
||||
{ 0x0ce9, 0x05d9 },
|
||||
{ 0x0cea, 0x05da },
|
||||
{ 0x0ceb, 0x05db },
|
||||
{ 0x0cec, 0x05dc },
|
||||
{ 0x0ced, 0x05dd },
|
||||
{ 0x0cee, 0x05de },
|
||||
{ 0x0cef, 0x05df },
|
||||
{ 0x0cf0, 0x05e0 },
|
||||
{ 0x0cf1, 0x05e1 },
|
||||
{ 0x0cf2, 0x05e2 },
|
||||
{ 0x0cf3, 0x05e3 },
|
||||
{ 0x0cf4, 0x05e4 },
|
||||
{ 0x0cf5, 0x05e5 },
|
||||
{ 0x0cf6, 0x05e6 },
|
||||
{ 0x0cf7, 0x05e7 },
|
||||
{ 0x0cf8, 0x05e8 },
|
||||
{ 0x0cf9, 0x05e9 },
|
||||
{ 0x0cfa, 0x05ea },
|
||||
{ 0x0da1, 0x0e01 },
|
||||
{ 0x0da2, 0x0e02 },
|
||||
{ 0x0da3, 0x0e03 },
|
||||
{ 0x0da4, 0x0e04 },
|
||||
{ 0x0da5, 0x0e05 },
|
||||
{ 0x0da6, 0x0e06 },
|
||||
{ 0x0da7, 0x0e07 },
|
||||
{ 0x0da8, 0x0e08 },
|
||||
{ 0x0da9, 0x0e09 },
|
||||
{ 0x0daa, 0x0e0a },
|
||||
{ 0x0dab, 0x0e0b },
|
||||
{ 0x0dac, 0x0e0c },
|
||||
{ 0x0dad, 0x0e0d },
|
||||
{ 0x0dae, 0x0e0e },
|
||||
{ 0x0daf, 0x0e0f },
|
||||
{ 0x0db0, 0x0e10 },
|
||||
{ 0x0db1, 0x0e11 },
|
||||
{ 0x0db2, 0x0e12 },
|
||||
{ 0x0db3, 0x0e13 },
|
||||
{ 0x0db4, 0x0e14 },
|
||||
{ 0x0db5, 0x0e15 },
|
||||
{ 0x0db6, 0x0e16 },
|
||||
{ 0x0db7, 0x0e17 },
|
||||
{ 0x0db8, 0x0e18 },
|
||||
{ 0x0db9, 0x0e19 },
|
||||
{ 0x0dba, 0x0e1a },
|
||||
{ 0x0dbb, 0x0e1b },
|
||||
{ 0x0dbc, 0x0e1c },
|
||||
{ 0x0dbd, 0x0e1d },
|
||||
{ 0x0dbe, 0x0e1e },
|
||||
{ 0x0dbf, 0x0e1f },
|
||||
{ 0x0dc0, 0x0e20 },
|
||||
{ 0x0dc1, 0x0e21 },
|
||||
{ 0x0dc2, 0x0e22 },
|
||||
{ 0x0dc3, 0x0e23 },
|
||||
{ 0x0dc4, 0x0e24 },
|
||||
{ 0x0dc5, 0x0e25 },
|
||||
{ 0x0dc6, 0x0e26 },
|
||||
{ 0x0dc7, 0x0e27 },
|
||||
{ 0x0dc8, 0x0e28 },
|
||||
{ 0x0dc9, 0x0e29 },
|
||||
{ 0x0dca, 0x0e2a },
|
||||
{ 0x0dcb, 0x0e2b },
|
||||
{ 0x0dcc, 0x0e2c },
|
||||
{ 0x0dcd, 0x0e2d },
|
||||
{ 0x0dce, 0x0e2e },
|
||||
{ 0x0dcf, 0x0e2f },
|
||||
{ 0x0dd0, 0x0e30 },
|
||||
{ 0x0dd1, 0x0e31 },
|
||||
{ 0x0dd2, 0x0e32 },
|
||||
{ 0x0dd3, 0x0e33 },
|
||||
{ 0x0dd4, 0x0e34 },
|
||||
{ 0x0dd5, 0x0e35 },
|
||||
{ 0x0dd6, 0x0e36 },
|
||||
{ 0x0dd7, 0x0e37 },
|
||||
{ 0x0dd8, 0x0e38 },
|
||||
{ 0x0dd9, 0x0e39 },
|
||||
{ 0x0dda, 0x0e3a },
|
||||
{ 0x0ddf, 0x0e3f },
|
||||
{ 0x0de0, 0x0e40 },
|
||||
{ 0x0de1, 0x0e41 },
|
||||
{ 0x0de2, 0x0e42 },
|
||||
{ 0x0de3, 0x0e43 },
|
||||
{ 0x0de4, 0x0e44 },
|
||||
{ 0x0de5, 0x0e45 },
|
||||
{ 0x0de6, 0x0e46 },
|
||||
{ 0x0de7, 0x0e47 },
|
||||
{ 0x0de8, 0x0e48 },
|
||||
{ 0x0de9, 0x0e49 },
|
||||
{ 0x0dea, 0x0e4a },
|
||||
{ 0x0deb, 0x0e4b },
|
||||
{ 0x0dec, 0x0e4c },
|
||||
{ 0x0ded, 0x0e4d },
|
||||
{ 0x0df0, 0x0e50 },
|
||||
{ 0x0df1, 0x0e51 },
|
||||
{ 0x0df2, 0x0e52 },
|
||||
{ 0x0df3, 0x0e53 },
|
||||
{ 0x0df4, 0x0e54 },
|
||||
{ 0x0df5, 0x0e55 },
|
||||
{ 0x0df6, 0x0e56 },
|
||||
{ 0x0df7, 0x0e57 },
|
||||
{ 0x0df8, 0x0e58 },
|
||||
{ 0x0df9, 0x0e59 },
|
||||
{ 0x0ea1, 0x3131 },
|
||||
{ 0x0ea2, 0x3132 },
|
||||
{ 0x0ea3, 0x3133 },
|
||||
{ 0x0ea4, 0x3134 },
|
||||
{ 0x0ea5, 0x3135 },
|
||||
{ 0x0ea6, 0x3136 },
|
||||
{ 0x0ea7, 0x3137 },
|
||||
{ 0x0ea8, 0x3138 },
|
||||
{ 0x0ea9, 0x3139 },
|
||||
{ 0x0eaa, 0x313a },
|
||||
{ 0x0eab, 0x313b },
|
||||
{ 0x0eac, 0x313c },
|
||||
{ 0x0ead, 0x313d },
|
||||
{ 0x0eae, 0x313e },
|
||||
{ 0x0eaf, 0x313f },
|
||||
{ 0x0eb0, 0x3140 },
|
||||
{ 0x0eb1, 0x3141 },
|
||||
{ 0x0eb2, 0x3142 },
|
||||
{ 0x0eb3, 0x3143 },
|
||||
{ 0x0eb4, 0x3144 },
|
||||
{ 0x0eb5, 0x3145 },
|
||||
{ 0x0eb6, 0x3146 },
|
||||
{ 0x0eb7, 0x3147 },
|
||||
{ 0x0eb8, 0x3148 },
|
||||
{ 0x0eb9, 0x3149 },
|
||||
{ 0x0eba, 0x314a },
|
||||
{ 0x0ebb, 0x314b },
|
||||
{ 0x0ebc, 0x314c },
|
||||
{ 0x0ebd, 0x314d },
|
||||
{ 0x0ebe, 0x314e },
|
||||
{ 0x0ebf, 0x314f },
|
||||
{ 0x0ec0, 0x3150 },
|
||||
{ 0x0ec1, 0x3151 },
|
||||
{ 0x0ec2, 0x3152 },
|
||||
{ 0x0ec3, 0x3153 },
|
||||
{ 0x0ec4, 0x3154 },
|
||||
{ 0x0ec5, 0x3155 },
|
||||
{ 0x0ec6, 0x3156 },
|
||||
{ 0x0ec7, 0x3157 },
|
||||
{ 0x0ec8, 0x3158 },
|
||||
{ 0x0ec9, 0x3159 },
|
||||
{ 0x0eca, 0x315a },
|
||||
{ 0x0ecb, 0x315b },
|
||||
{ 0x0ecc, 0x315c },
|
||||
{ 0x0ecd, 0x315d },
|
||||
{ 0x0ece, 0x315e },
|
||||
{ 0x0ecf, 0x315f },
|
||||
{ 0x0ed0, 0x3160 },
|
||||
{ 0x0ed1, 0x3161 },
|
||||
{ 0x0ed2, 0x3162 },
|
||||
{ 0x0ed3, 0x3163 },
|
||||
{ 0x0ed4, 0x11a8 },
|
||||
{ 0x0ed5, 0x11a9 },
|
||||
{ 0x0ed6, 0x11aa },
|
||||
{ 0x0ed7, 0x11ab },
|
||||
{ 0x0ed8, 0x11ac },
|
||||
{ 0x0ed9, 0x11ad },
|
||||
{ 0x0eda, 0x11ae },
|
||||
{ 0x0edb, 0x11af },
|
||||
{ 0x0edc, 0x11b0 },
|
||||
{ 0x0edd, 0x11b1 },
|
||||
{ 0x0ede, 0x11b2 },
|
||||
{ 0x0edf, 0x11b3 },
|
||||
{ 0x0ee0, 0x11b4 },
|
||||
{ 0x0ee1, 0x11b5 },
|
||||
{ 0x0ee2, 0x11b6 },
|
||||
{ 0x0ee3, 0x11b7 },
|
||||
{ 0x0ee4, 0x11b8 },
|
||||
{ 0x0ee5, 0x11b9 },
|
||||
{ 0x0ee6, 0x11ba },
|
||||
{ 0x0ee7, 0x11bb },
|
||||
{ 0x0ee8, 0x11bc },
|
||||
{ 0x0ee9, 0x11bd },
|
||||
{ 0x0eea, 0x11be },
|
||||
{ 0x0eeb, 0x11bf },
|
||||
{ 0x0eec, 0x11c0 },
|
||||
{ 0x0eed, 0x11c1 },
|
||||
{ 0x0eee, 0x11c2 },
|
||||
{ 0x0eef, 0x316d },
|
||||
{ 0x0ef0, 0x3171 },
|
||||
{ 0x0ef1, 0x3178 },
|
||||
{ 0x0ef2, 0x317f },
|
||||
{ 0x0ef3, 0x3181 },
|
||||
{ 0x0ef4, 0x3184 },
|
||||
{ 0x0ef5, 0x3186 },
|
||||
{ 0x0ef6, 0x318d },
|
||||
{ 0x0ef7, 0x318e },
|
||||
{ 0x0ef8, 0x11eb },
|
||||
{ 0x0ef9, 0x11f0 },
|
||||
{ 0x0efa, 0x11f9 },
|
||||
{ 0x0eff, 0x20a9 },
|
||||
{ 0x13a4, 0x20ac },
|
||||
{ 0x13bc, 0x0152 },
|
||||
{ 0x13bd, 0x0153 },
|
||||
{ 0x13be, 0x0178 },
|
||||
{ 0x20ac, 0x20ac },
|
||||
// Numeric keypad with numlock on
|
||||
{ XK_KP_Space, ' ' },
|
||||
{ XK_KP_Equal, '=' },
|
||||
{ XK_KP_Multiply, '*' },
|
||||
{ XK_KP_Add, '+' },
|
||||
{ XK_KP_Separator, ',' },
|
||||
{ XK_KP_Subtract, '-' },
|
||||
{ XK_KP_Decimal, '.' },
|
||||
{ XK_KP_Divide, '/' },
|
||||
{ XK_KP_0, 0x0030 },
|
||||
{ XK_KP_1, 0x0031 },
|
||||
{ XK_KP_2, 0x0032 },
|
||||
{ XK_KP_3, 0x0033 },
|
||||
{ XK_KP_4, 0x0034 },
|
||||
{ XK_KP_5, 0x0035 },
|
||||
{ XK_KP_6, 0x0036 },
|
||||
{ XK_KP_7, 0x0037 },
|
||||
{ XK_KP_8, 0x0038 },
|
||||
{ XK_KP_9, 0x0039 }
|
||||
};
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Convert X11 KeySym to Unicode
|
||||
//========================================================================
|
||||
|
||||
long _glfwKeySym2Unicode( KeySym keysym )
|
||||
{
|
||||
int min = 0;
|
||||
int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
|
||||
int mid;
|
||||
|
||||
/* First check for Latin-1 characters (1:1 mapping) */
|
||||
if( (keysym >= 0x0020 && keysym <= 0x007e) ||
|
||||
(keysym >= 0x00a0 && keysym <= 0x00ff) )
|
||||
{ return keysym;
|
||||
}
|
||||
|
||||
/* Also check for directly encoded 24-bit UCS characters */
|
||||
if( (keysym & 0xff000000) == 0x01000000 )
|
||||
{
|
||||
return keysym & 0x00ffffff;
|
||||
}
|
||||
|
||||
/* Binary search in table */
|
||||
while( max >= min )
|
||||
{
|
||||
mid = (min + max) / 2;
|
||||
if( keysymtab[mid].keysym < keysym )
|
||||
{
|
||||
min = mid + 1;
|
||||
}
|
||||
else if( keysymtab[mid].keysym > keysym )
|
||||
{
|
||||
max = mid - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Found it! */
|
||||
return keysymtab[mid].ucs;
|
||||
}
|
||||
}
|
||||
|
||||
/* No matching Unicode value found */
|
||||
return -1;
|
||||
}
|
||||
503
ogl_editor/external/glfw/lib/x11/x11_thread.c
vendored
Normal file
503
ogl_editor/external/glfw/lib/x11/x11_thread.c
vendored
Normal file
@ -0,0 +1,503 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** GLFW internal functions ****
|
||||
//************************************************************************
|
||||
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
//========================================================================
|
||||
// This is simply a "wrapper" for calling the user thread function.
|
||||
//========================================================================
|
||||
|
||||
void * _glfwNewThread( void * arg )
|
||||
{
|
||||
GLFWthreadfun threadfun;
|
||||
_GLFWthread *t;
|
||||
pthread_t posixID;
|
||||
|
||||
// Get current thread ID
|
||||
posixID = pthread_self();
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Loop through entire list of threads to find the matching POSIX
|
||||
// thread ID
|
||||
for( t = &_glfwThrd.First; t != NULL; t = t->Next )
|
||||
{
|
||||
if( t->PosixID == posixID )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get user thread function pointer
|
||||
threadfun = t->Function;
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Call the user thread function
|
||||
threadfun( arg );
|
||||
|
||||
// Remove thread from thread list
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
_glfwRemoveThread( t );
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// When the thread function returns, the thread will die...
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Create a new thread
|
||||
//========================================================================
|
||||
|
||||
GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
GLFWthread ID;
|
||||
_GLFWthread *t;
|
||||
int result;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Create a new thread information memory area
|
||||
t = (_GLFWthread *) malloc( sizeof(_GLFWthread) );
|
||||
if( t == NULL )
|
||||
{
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get a new unique thread id
|
||||
ID = _glfwThrd.NextID ++;
|
||||
|
||||
// Store thread information in the thread list
|
||||
t->Function = fun;
|
||||
t->ID = ID;
|
||||
|
||||
// Create thread
|
||||
result = pthread_create(
|
||||
&t->PosixID, // Thread handle
|
||||
NULL, // Default thread attributes
|
||||
_glfwNewThread, // Thread function (a wrapper function)
|
||||
(void *)arg // Argument to thread is user argument
|
||||
);
|
||||
|
||||
// Did the thread creation fail?
|
||||
if( result != 0 )
|
||||
{
|
||||
free( (void *) t );
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Append thread to thread list
|
||||
_glfwAppendThread( t );
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Return the GLFW thread ID
|
||||
return ID;
|
||||
|
||||
#else
|
||||
|
||||
return -1;
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT
|
||||
// BE USED EXCEPT IN EXTREME SITUATIONS!
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyThread( GLFWthread ID )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
_GLFWthread *t;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Get thread information pointer
|
||||
t = _glfwGetThreadPointer( ID );
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return;
|
||||
}
|
||||
|
||||
// Simply murder the process, no mercy!
|
||||
pthread_kill( t->PosixID, SIGKILL );
|
||||
|
||||
// Remove thread from thread list
|
||||
_glfwRemoveThread( t );
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Wait for a thread to die
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformWaitThread( GLFWthread ID, int waitmode )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
pthread_t thread;
|
||||
_GLFWthread *t;
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Get thread information pointer
|
||||
t = _glfwGetThreadPointer( ID );
|
||||
|
||||
// Is the thread already dead?
|
||||
if( t == NULL )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
// If got this far, the thread is alive => polling returns FALSE
|
||||
if( waitmode == GLFW_NOWAIT )
|
||||
{
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
// Get thread handle
|
||||
thread = t->PosixID;
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Wait for thread to die
|
||||
(void) pthread_join( thread, NULL );
|
||||
|
||||
return GL_TRUE;
|
||||
|
||||
#else
|
||||
|
||||
return GL_TRUE;
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return the thread ID for the current thread
|
||||
//========================================================================
|
||||
|
||||
GLFWthread _glfwPlatformGetThreadID( void )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
_GLFWthread *t;
|
||||
GLFWthread ID = -1;
|
||||
pthread_t posixID;
|
||||
|
||||
// Get current thread ID
|
||||
posixID = pthread_self();
|
||||
|
||||
// Enter critical section
|
||||
ENTER_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Loop through entire list of threads to find the matching POSIX
|
||||
// thread ID
|
||||
for( t = &_glfwThrd.First; t != NULL; t = t->Next )
|
||||
{
|
||||
if( t->PosixID == posixID )
|
||||
{
|
||||
ID = t->ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Leave critical section
|
||||
LEAVE_THREAD_CRITICAL_SECTION
|
||||
|
||||
// Return the found GLFW thread identifier
|
||||
return ID;
|
||||
|
||||
#else
|
||||
|
||||
return 0;
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Create a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
GLFWmutex _glfwPlatformCreateMutex( void )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
pthread_mutex_t *mutex;
|
||||
|
||||
// Allocate memory for mutex
|
||||
mutex = (pthread_mutex_t *) malloc( sizeof( pthread_mutex_t ) );
|
||||
if( !mutex )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialise a mutex object
|
||||
(void) pthread_mutex_init( mutex, NULL );
|
||||
|
||||
// Cast to GLFWmutex and return
|
||||
return (GLFWmutex) mutex;
|
||||
|
||||
#else
|
||||
|
||||
return (GLFWmutex) 0;
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Destroy a mutual exclusion object
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyMutex( GLFWmutex mutex )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
// Destroy the mutex object
|
||||
pthread_mutex_destroy( (pthread_mutex_t *) mutex );
|
||||
|
||||
// Free memory for mutex object
|
||||
free( (void *) mutex );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Request access to a mutex
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformLockMutex( GLFWmutex mutex )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
// Wait for mutex to be released
|
||||
(void) pthread_mutex_lock( (pthread_mutex_t *) mutex );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Release a mutex
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformUnlockMutex( GLFWmutex mutex )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
// Release mutex
|
||||
pthread_mutex_unlock( (pthread_mutex_t *) mutex );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Create a new condition variable object
|
||||
//========================================================================
|
||||
|
||||
GLFWcond _glfwPlatformCreateCond( void )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
pthread_cond_t *cond;
|
||||
|
||||
// Allocate memory for condition variable
|
||||
cond = (pthread_cond_t *) malloc( sizeof(pthread_cond_t) );
|
||||
if( !cond )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialise condition variable
|
||||
(void) pthread_cond_init( cond, NULL );
|
||||
|
||||
// Cast to GLFWcond and return
|
||||
return (GLFWcond) cond;
|
||||
|
||||
#else
|
||||
|
||||
return (GLFWcond) 0;
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Destroy a condition variable object
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformDestroyCond( GLFWcond cond )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
// Destroy the condition variable object
|
||||
(void) pthread_cond_destroy( (pthread_cond_t *) cond );
|
||||
|
||||
// Free memory for condition variable object
|
||||
free( (void *) cond );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Wait for a condition to be raised
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex,
|
||||
double timeout )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
struct timeval currenttime;
|
||||
struct timespec wait;
|
||||
long dt_sec, dt_usec;
|
||||
|
||||
// Select infinite or timed wait
|
||||
if( timeout >= GLFW_INFINITY )
|
||||
{
|
||||
// Wait for condition (infinite wait)
|
||||
(void) pthread_cond_wait( (pthread_cond_t *) cond,
|
||||
(pthread_mutex_t *) mutex );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set timeout time, relatvie to current time
|
||||
gettimeofday( ¤ttime, NULL );
|
||||
dt_sec = (long) timeout;
|
||||
dt_usec = (long) ((timeout - (double)dt_sec) * 1000000.0);
|
||||
wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L;
|
||||
if( wait.tv_nsec > 1000000000L )
|
||||
{
|
||||
wait.tv_nsec -= 1000000000L;
|
||||
dt_sec ++;
|
||||
}
|
||||
wait.tv_sec = currenttime.tv_sec + dt_sec;
|
||||
|
||||
// Wait for condition (timed wait)
|
||||
(void) pthread_cond_timedwait( (pthread_cond_t *) cond,
|
||||
(pthread_mutex_t *) mutex, &wait );
|
||||
}
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Signal a condition to one waiting thread
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSignalCond( GLFWcond cond )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
// Signal condition
|
||||
(void) pthread_cond_signal( (pthread_cond_t *) cond );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Broadcast a condition to all waiting threads
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformBroadcastCond( GLFWcond cond )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
// Broadcast condition
|
||||
(void) pthread_cond_broadcast( (pthread_cond_t *) cond );
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return the number of processors in the system.
|
||||
//========================================================================
|
||||
|
||||
int _glfwPlatformGetNumberOfProcessors( void )
|
||||
{
|
||||
int n;
|
||||
|
||||
// Get number of processors online
|
||||
_glfw_numprocessors( n );
|
||||
return n;
|
||||
}
|
||||
|
||||
174
ogl_editor/external/glfw/lib/x11/x11_time.c
vendored
Normal file
174
ogl_editor/external/glfw/lib/x11/x11_time.c
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
//========================================================================
|
||||
// GLFW - An OpenGL framework
|
||||
// Platform: X11/GLX
|
||||
// API version: 2.7
|
||||
// WWW: http://www.glfw.org/
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Return raw time
|
||||
//========================================================================
|
||||
|
||||
static uint64_t getRawTime(void)
|
||||
{
|
||||
#if defined( CLOCK_MONOTONIC )
|
||||
if( _glfwLibrary.Timer.monotonic )
|
||||
{
|
||||
struct timespec ts;
|
||||
|
||||
clock_gettime( CLOCK_MONOTONIC, &ts );
|
||||
return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
gettimeofday( &tv, NULL );
|
||||
return (uint64_t) tv.tv_sec * (uint64_t) 1000000 + (uint64_t) tv.tv_usec;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Initialise timer
|
||||
//========================================================================
|
||||
|
||||
void _glfwInitTimer( void )
|
||||
{
|
||||
#if defined( CLOCK_MONOTONIC )
|
||||
struct timespec ts;
|
||||
|
||||
if( clock_gettime( CLOCK_MONOTONIC, &ts ) == 0 )
|
||||
{
|
||||
_glfwLibrary.Timer.monotonic = GL_TRUE;
|
||||
_glfwLibrary.Timer.resolution = 1e-9;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
_glfwLibrary.Timer.resolution = 1e-6;
|
||||
}
|
||||
|
||||
_glfwLibrary.Timer.base = getRawTime();
|
||||
}
|
||||
|
||||
|
||||
//************************************************************************
|
||||
//**** Platform implementation functions ****
|
||||
//************************************************************************
|
||||
|
||||
//========================================================================
|
||||
// Return timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
double _glfwPlatformGetTime( void )
|
||||
{
|
||||
return (double) (getRawTime() - _glfwLibrary.Timer.base) *
|
||||
_glfwLibrary.Timer.resolution;
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Set timer value in seconds
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSetTime( double time )
|
||||
{
|
||||
_glfwLibrary.Timer.base = getRawTime() -
|
||||
(uint64_t) (time / _glfwLibrary.Timer.resolution);
|
||||
}
|
||||
|
||||
|
||||
//========================================================================
|
||||
// Put a thread to sleep for a specified amount of time
|
||||
//========================================================================
|
||||
|
||||
void _glfwPlatformSleep( double time )
|
||||
{
|
||||
#ifdef _GLFW_HAS_PTHREAD
|
||||
|
||||
if( time == 0.0 )
|
||||
{
|
||||
#ifdef _GLFW_HAS_SCHED_YIELD
|
||||
sched_yield();
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
struct timeval currenttime;
|
||||
struct timespec wait;
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
long dt_sec, dt_usec;
|
||||
|
||||
// Not all pthread implementations have a pthread_sleep() function. We
|
||||
// do it the portable way, using a timed wait for a condition that we
|
||||
// will never signal. NOTE: The unistd functions sleep/usleep suspends
|
||||
// the entire PROCESS, not a signle thread, which is why we can not
|
||||
// use them to implement glfwSleep.
|
||||
|
||||
// Set timeout time, relatvie to current time
|
||||
gettimeofday( ¤ttime, NULL );
|
||||
dt_sec = (long) time;
|
||||
dt_usec = (long) ((time - (double)dt_sec) * 1000000.0);
|
||||
wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L;
|
||||
if( wait.tv_nsec > 1000000000L )
|
||||
{
|
||||
wait.tv_nsec -= 1000000000L;
|
||||
dt_sec++;
|
||||
}
|
||||
wait.tv_sec = currenttime.tv_sec + dt_sec;
|
||||
|
||||
// Initialize condition and mutex objects
|
||||
pthread_mutex_init( &mutex, NULL );
|
||||
pthread_cond_init( &cond, NULL );
|
||||
|
||||
// Do a timed wait
|
||||
pthread_mutex_lock( &mutex );
|
||||
pthread_cond_timedwait( &cond, &mutex, &wait );
|
||||
pthread_mutex_unlock( &mutex );
|
||||
|
||||
// Destroy condition and mutex objects
|
||||
pthread_mutex_destroy( &mutex );
|
||||
pthread_cond_destroy( &cond );
|
||||
|
||||
#else
|
||||
|
||||
// For systems without PTHREAD, use unistd usleep
|
||||
if( time > 0 )
|
||||
{
|
||||
usleep( (unsigned int) (time*1000000) );
|
||||
}
|
||||
|
||||
#endif // _GLFW_HAS_PTHREAD
|
||||
}
|
||||
|
||||
1938
ogl_editor/external/glfw/lib/x11/x11_window.c
vendored
Normal file
1938
ogl_editor/external/glfw/lib/x11/x11_window.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14
ogl_editor/external/mxml/ANNOUNCEMENT
vendored
Normal file
14
ogl_editor/external/mxml/ANNOUNCEMENT
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
Mini-XML 2.7 is now available for download from:
|
||||
|
||||
http://www.minixml.org/software.php
|
||||
|
||||
Mini-XML 2.7 fixes some minor platform and XML issues. Changes include:
|
||||
|
||||
- Updated the source headers to reference the Mini-XML license and its
|
||||
exceptions to the LGPL2 (STR #108)
|
||||
- The shared library did not include a destructor for the thread-
|
||||
specific data key on UNIX-based operating systems (STR #103)
|
||||
- mxmlLoad* did not error out on XML with multiple root nodes (STR #101)
|
||||
- Fixed an issue with the _mxml_vstrdupf function (STR #107)
|
||||
- mxmlSave* no longer write all siblings of the passed node, just that
|
||||
node and its children (STR #109)
|
||||
345
ogl_editor/external/mxml/CHANGES
vendored
Normal file
345
ogl_editor/external/mxml/CHANGES
vendored
Normal file
@ -0,0 +1,345 @@
|
||||
CHANGES - 2011-12-20
|
||||
--------------------
|
||||
|
||||
CHANGES IN Mini-XML 2.7
|
||||
|
||||
- Added 64-bit configurations to the VC++ project files (STR #129)
|
||||
- Fixed conformance of mxmldoc's HTML and CSS output.
|
||||
- Added data accessor ("get") functions and made the mxml_node_t and
|
||||
mxml_index_t structures private but still available in the Mini-XML
|
||||
header to preserve source compatibility (STR #118)
|
||||
- Updated the source headers to reference the Mini-XML license and its
|
||||
exceptions to the LGPL2 (STR #108)
|
||||
- Fixed a memory leak when loading a badly-formed XML file (STR #121)
|
||||
- Added a new mxmlFindPath() function to find the value node of a
|
||||
named element (STR #110)
|
||||
- Building a static version of the library did not work on Windows
|
||||
(STR #112)
|
||||
- The shared library did not include a destructor for the thread-
|
||||
specific data key on UNIX-based operating systems (STR #103)
|
||||
- mxmlLoad* did not error out on XML with multiple root nodes (STR #101)
|
||||
- Fixed an issue with the _mxml_vstrdupf function (STR #107)
|
||||
- mxmlSave* no longer write all siblings of the passed node, just that
|
||||
node and its children (STR #109)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.6
|
||||
|
||||
- Documentation fixes (STR #91, STR #92)
|
||||
- The mxmldoc program did not handle typedef comments properly (STR #72)
|
||||
- Added support for "long long" printf formats.
|
||||
- The XML parser now ignores BOMs in UTF-8 XML files (STR #89)
|
||||
- The mxmldoc program now supports generating Xcode documentation sets.
|
||||
- mxmlSave*() did not output UTF-8 correctly on some platforms.
|
||||
- mxmlNewXML() now adds encoding="utf-8" in the ?xml directive to avoid
|
||||
problems with non-conformant XML parsers that assume something other
|
||||
than UTF-8 as the default encoding.
|
||||
- Wrapping was not disabled when mxmlSetWrapMargin(0) was called, and
|
||||
"<?xml ... ?>" was always followed by a newline (STR #76)
|
||||
- The mxml.pc.in file was broken (STR #79)
|
||||
- The mxmldoc program now handles "typedef enum name {} name" correctly
|
||||
(STR #72)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.5
|
||||
|
||||
- The mxmldoc program now makes greater use of CSS and
|
||||
supports a --css option to embed an alternate stylesheet.
|
||||
- The mxmldoc program now supports --header and --footer
|
||||
options to insert documentation content before and
|
||||
after the generated content.
|
||||
- The mxmldoc program now supports a --framed option to
|
||||
generate framed HTML output.
|
||||
- The mxmldoc program now creates a table of contents
|
||||
including any headings in the --intro file when
|
||||
generating HTML output.
|
||||
- The man pages and man page output from mxmldoc did
|
||||
not use "\-" for dashes (STR #68)
|
||||
- The debug version of the Mini-XML DLL could not be
|
||||
built (STR #65)
|
||||
- Processing instructions and directives did not work
|
||||
when not at the top level of a document (STR #67)
|
||||
- Spaces around the "=" in attributes were not supported
|
||||
(STR #67)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.4
|
||||
|
||||
- Fixed shared library build problems on HP-UX and Mac OS X.
|
||||
- The mxmldoc program did not output argument descriptions
|
||||
for functions properly.
|
||||
- All global settings (custom, error, and entity callbacks
|
||||
and the wrap margin) are now managed separately for each
|
||||
thread.
|
||||
- Added mxmlElementDeleteAttr() function (STR #59)
|
||||
- mxmlElementSetAttrf() did not work (STR #57)
|
||||
- mxmlLoad*() incorrectly treated declarations as parent
|
||||
elements (STR #56)
|
||||
- mxmlLoad*() incorrectly allowed attributes without values
|
||||
(STR #47)
|
||||
- Fixed Visual C++ build problems (STR #49)
|
||||
- mxmlLoad*() did not return NULL when an element contained
|
||||
an error (STR #46)
|
||||
- Added support for the apos character entity (STR #54)
|
||||
- Fixed whitespace detection with Unicode characters (STR
|
||||
#48)
|
||||
- mxmlWalkNext() and mxmlWalkPrev() did not work correctly
|
||||
when called with a node with no children as the top node
|
||||
(STR #53)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.3
|
||||
|
||||
- Added two exceptions to the LGPL to support static
|
||||
linking of applications against Mini-XML
|
||||
- The mxmldoc utility can now generate man pages, too.
|
||||
- Added a mxmlNewXML() function
|
||||
- Added a mxmlElementSetAttrf() function (STR #43)
|
||||
- Added snprintf() emulation function for test program (STR
|
||||
#32)
|
||||
- Added the _CRT_SECURE_NO_DEPRECATE definition when
|
||||
building on VC++ 2005 (STR #36)
|
||||
- mxmlLoad*() did not detect missing > characters in
|
||||
elements (STR #41)
|
||||
- mxmlLoad*() did not detect missing close tags at the end
|
||||
of an XML document (STR #45)
|
||||
- Added user_data and ref_count members to mxml_node_t
|
||||
structure
|
||||
- Added mxmlReleaseNode() and mxmlRetainNode() APIs for
|
||||
reference-counted nodes
|
||||
- Added mxmlSetWrapMargin() to control the wrapping of XML
|
||||
output
|
||||
- Added conditional check for EINTR error code for
|
||||
certain Windows compilers that do not define it (STR
|
||||
#33)
|
||||
- The mxmldoc program now generates correct HTML 4.0
|
||||
output - previously it generated invalid XHTML
|
||||
- The mxmldoc program now supports "@deprecated@,
|
||||
"@private@", and "@since version@" comments
|
||||
- Fixed function and enumeration type bugs in mxmldoc.
|
||||
- Fixed the XML schema for mxmldoc
|
||||
- The mxmldoc program now supports --intro, --section,
|
||||
and --title options
|
||||
- The mxmlLoad*() functions could leak a node on an error
|
||||
(STR #27)
|
||||
- The mxml_vsnprintf() function could get in an infinite
|
||||
loop on a buffer overflow (STR #25)
|
||||
- Added new mxmlNewCDATA() and mxmlSetCDATA() functions
|
||||
to create and set CDATA nodes, which are really just
|
||||
special element nodes
|
||||
- Added new MXML_IGNORE type and MXML_IGNORE_CB callback
|
||||
to ignore non-element nodes, e.g. whitespace
|
||||
- mxmlLoad*() crashed when reporting an error in some
|
||||
invalid XML (STR #23)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.2.2
|
||||
|
||||
- mxmlLoad*() did not treat custom data as opaque, so
|
||||
whitespace characters would be lost.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.2.1
|
||||
|
||||
- mxmlLoadFd(), mxmlLoadFile(), and mxmlLoadString() now
|
||||
correctly return NULL on error (STR #21)
|
||||
- mxmlNewInteger(), mxmlNewOpaque(), mxmlNewReal(),
|
||||
mxmlNewText(), and mxmlNewTextf() incorrectly required
|
||||
a parent node (STR #22)
|
||||
- Fixed an XML output bug in mxmldoc.
|
||||
- The "make install" target now uses the install command
|
||||
to set the proper permissions on UNIX/Linux/OSX.
|
||||
- Fixed a MingW/Cygwin compilation problem (STR #18)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.2
|
||||
|
||||
- Added shared library support (STR #17)
|
||||
- mxmlLoad*() now returns an error when an XML stream
|
||||
contains illegal control characters (STR #10)
|
||||
- mxmlLoad*() now returns an error when an element
|
||||
contains two attributes with the same name in
|
||||
conformance with the XML spec (STR #16)
|
||||
- Added support for CDATA (STR #14, STR #15)
|
||||
- Updated comment and processing instruction handling -
|
||||
no entity support per XML specification.
|
||||
- Added checking for invalid comment termination ("--->"
|
||||
is not allowed)
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.1
|
||||
|
||||
- Added support for custom data nodes (STR #6)
|
||||
- Now treat UTF-8 sequences which are longer than
|
||||
necessary as an error (STR #4)
|
||||
- Fixed entity number support (STR #8)
|
||||
- Fixed mxmlLoadString() bug with UTF-8 (STR #7)
|
||||
- Fixed entity lookup bug (STR #5)
|
||||
- Added mxmlLoadFd() and mxmlSaveFd() functions.
|
||||
- Fixed multi-word UTF-16 handling.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 2.0
|
||||
|
||||
- New programmers manual.
|
||||
- Added Visual C++ project files for Microsoft Windows
|
||||
users.
|
||||
- Added optimizations to mxmldoc, mxmlSaveFile(), and
|
||||
mxmlIndexNew() (STR #2)
|
||||
- mxmlEntityAddCallback() now returns an integer status
|
||||
(STR #2)
|
||||
- Added UTF-16 support (input only; all output is UTF-8)
|
||||
- Added index functions to build a searchable index of
|
||||
XML nodes.
|
||||
- Added character entity callback interface to support
|
||||
additional character entities beyond those defined in
|
||||
the XHTML specification.
|
||||
- Added support for XHTML character entities.
|
||||
- The mxmldoc utility now produces XML output which
|
||||
conforms to an updated XML schema, described in the file
|
||||
"doc/mxmldoc.xsd".
|
||||
- Changed the whitespace callback interface to return
|
||||
strings instead of a single character, allowing for
|
||||
greater control over the formatting of XML files
|
||||
written using Mini-XML. THIS CHANGE WILL REQUIRE
|
||||
CHANGES TO YOUR 1.x CODE IF YOU USE WHITESPACE
|
||||
CALLBACKS.
|
||||
- The mxmldoc utility is now capable of documenting C++
|
||||
classes, functions, and structures, and correctly
|
||||
handles C++ comments.
|
||||
- Added new modular tests for mxmldoc.
|
||||
- Updated the mxmldoc output to be more compatible with
|
||||
embedding in manuals produced with HTMLDOC.
|
||||
- The makefile incorrectly included a "/" separator
|
||||
between the destination path and install path. This
|
||||
caused problems when building and installing with
|
||||
MingW.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 1.3
|
||||
|
||||
- Fixes for mxmldoc.
|
||||
- Added support for reading standard HTML entity names.
|
||||
- mxmlLoadString/File() did not decode character
|
||||
entities in element names, attribute names, or
|
||||
attribute values.
|
||||
- mxmlLoadString/File() would crash when loading non-
|
||||
conformant XML data under an existing parent (top)
|
||||
node.
|
||||
- Fixed several bugs in the mxmldoc utility.
|
||||
- Added new error callback function to catch a variety
|
||||
of errors and log them to someplace other than stderr.
|
||||
- The mxmlElementSetAttr() function now allows for NULL
|
||||
attribute values.
|
||||
- The load and save functions now properly handle quoted
|
||||
element and attribute name strings properly, e.g. for
|
||||
!DOCTYPE declarations.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 1.2
|
||||
|
||||
- Added new "set" methods to set the value of a node.
|
||||
- Added new formatted text methods mxmlNewTextf() and
|
||||
mxmlSetTextf() to create/set a text node value using
|
||||
printf-style formats.
|
||||
- Added new standard callbacks for use with the mxmlLoad
|
||||
functions.
|
||||
- Updated the HTML documentation to include examples of
|
||||
the walk and load function output.
|
||||
- Added --with/without-ansi configure option to control
|
||||
the strdup() function check.
|
||||
- Added --with/without-snprintf configure option to
|
||||
control the snprintf() and vsnprintf() function
|
||||
checks.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 1.1.2
|
||||
|
||||
- The mxml(3) man page wasn't updated for the string
|
||||
functions.
|
||||
- mxmlSaveString() returned the wrong number of
|
||||
characters.
|
||||
- mxml_add_char() updated the buffer pointer in the
|
||||
wrong place.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 1.1.1
|
||||
|
||||
- The private mxml_add_ch() function did not update the
|
||||
start-of-buffer pointer which could cause a crash when
|
||||
using mxmlSaveString().
|
||||
- The private mxml_write_ws() function called putc()
|
||||
instead of using the proper callback which could cause
|
||||
a crash when using mxmlSaveString().
|
||||
- Added a mxmlSaveAllocString() convenience function for
|
||||
saving an XML node tree to an allocated string.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 1.1
|
||||
|
||||
- The mxmlLoadFile() function now uses dynamically
|
||||
allocated string buffers for element names, attribute
|
||||
names, and attribute values. Previously they were
|
||||
capped at 16383, 255, and 255 bytes, respectively.
|
||||
- Added a new mxmlLoadString() function for loading an
|
||||
XML node tree from a string.
|
||||
- Added a new mxmlSaveString() function for saving an
|
||||
XML node tree to a string.
|
||||
- Add emulation of strdup() if the local platform does
|
||||
not provide the function.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 1.0
|
||||
|
||||
- The mxmldoc program now handles function arguments,
|
||||
structures, unions, enumerations, classes, and
|
||||
typedefs properly.
|
||||
- Documentation provided via mxmldoc and more in-line
|
||||
comments in the code.
|
||||
- Added man pages and packaging files.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 0.93
|
||||
|
||||
- New mxmldoc example program that is also used to
|
||||
create and update code documentation using XML and
|
||||
produce HTML reference pages.
|
||||
- Added mxmlAdd() and mxmlRemove() functions to add and
|
||||
remove nodes from a tree. This provides more
|
||||
flexibility over where the nodes are inserted and
|
||||
allows nodes to be moved within the tree as needed.
|
||||
- mxmlLoadFile() now correctly handles comments.
|
||||
- mxmlLoadFile() now supports the required "gt", "quot",
|
||||
and "nbsp" character entities.
|
||||
- mxmlSaveFile() now uses newlines as whitespace
|
||||
when valid to do so.
|
||||
- mxmlFindElement() now also takes attribute name and
|
||||
attribute value string arguments to limit the search
|
||||
to specific elements with attributes and/or values.
|
||||
NULL pointers can be used as "wildcards".
|
||||
- Added uninstall target to makefile, and auto-reconfig
|
||||
if Makefile.in or configure.in are changed.
|
||||
- mxmlFindElement(), mxmlWalkNext(), and mxmlWalkPrev()
|
||||
now all provide "descend" arguments to control whether
|
||||
they descend into child nodes in the tree.
|
||||
- Fixed some whitespace issues in mxmlLoadFile().
|
||||
- Fixed Unicode output and whitespace issues in
|
||||
mxmlSaveFile().
|
||||
- mxmlSaveFile() now supports a whitespace callback to
|
||||
provide more human-readable XML output under program
|
||||
control.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 0.92
|
||||
|
||||
- mxmlSaveFile() didn't return a value on success.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 0.91
|
||||
|
||||
- mxmlWalkNext() would go into an infinite loop.
|
||||
|
||||
|
||||
CHANGES IN Mini-XML 0.9
|
||||
|
||||
- Initial public release.
|
||||
507
ogl_editor/external/mxml/COPYING
vendored
Normal file
507
ogl_editor/external/mxml/COPYING
vendored
Normal file
@ -0,0 +1,507 @@
|
||||
Mini-XML License
|
||||
September 18, 2010
|
||||
|
||||
|
||||
The Mini-XML library and included programs are provided under the
|
||||
terms of the GNU Library General Public License version 2 (LGPL2)
|
||||
with the following exceptions:
|
||||
|
||||
1. Static linking of applications to the Mini-XML library
|
||||
does not constitute a derivative work and does not require
|
||||
the author to provide source code for the application, use
|
||||
the shared Mini-XML libraries, or link their applications
|
||||
against a user-supplied version of Mini-XML.
|
||||
|
||||
If you link the application to a modified version of
|
||||
Mini-XML, then the changes to Mini-XML must be provided
|
||||
under the terms of the LGPL2 in sections 1, 2, and 4.
|
||||
|
||||
2. You do not have to provide a copy of the Mini-XML license
|
||||
with programs that are linked to the Mini-XML library, nor
|
||||
do you have to identify the Mini-XML license in your
|
||||
program or documentation as required by section 6 of the
|
||||
LGPL2.
|
||||
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the library GPL. It is
|
||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Library General Public License, applies to some
|
||||
specially designated Free Software Foundation software, and to any
|
||||
other libraries whose authors decide to use it. You can use it for
|
||||
your libraries, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if
|
||||
you distribute copies of the library, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link a program with the library, you must provide
|
||||
complete object files to the recipients so that they can relink them
|
||||
with the library, after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright
|
||||
the library, and (2) offer you this license which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
library. If the library is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original
|
||||
version, so that any problems introduced by others will not reflect on
|
||||
the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that companies distributing free
|
||||
software will individually obtain patent licenses, thus in effect
|
||||
transforming the program into proprietary software. To prevent this,
|
||||
we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary
|
||||
GNU General Public License, which was designed for utility programs. This
|
||||
license, the GNU Library General Public License, applies to certain
|
||||
designated libraries. This license is quite different from the ordinary
|
||||
one; be sure to read it in full, and don't assume that anything in it is
|
||||
the same as in the ordinary license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that
|
||||
they blur the distinction we usually make between modifying or adding to a
|
||||
program and simply using it. Linking a program with a library, without
|
||||
changing the library, is in some sense simply using the library, and is
|
||||
analogous to running a utility program or application program. However, in
|
||||
a textual and legal sense, the linked executable is a combined work, a
|
||||
derivative of the original library, and the ordinary General Public License
|
||||
treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General
|
||||
Public License for libraries did not effectively promote software
|
||||
sharing, because most developers did not use the libraries. We
|
||||
concluded that weaker conditions might promote sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the
|
||||
users of those programs of all benefit from the free status of the
|
||||
libraries themselves. This Library General Public License is intended to
|
||||
permit developers of non-free programs to use free libraries, while
|
||||
preserving your freedom as a user of such programs to change the free
|
||||
libraries that are incorporated in them. (We have not seen how to achieve
|
||||
this as regards changes in header files, but we have achieved it as regards
|
||||
changes in the actual functions of the Library.) The hope is that this
|
||||
will lead to faster development of free libraries.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, while the latter only
|
||||
works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary
|
||||
General Public License rather than by this special one.
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which
|
||||
contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Library
|
||||
General Public License (also called "this License"). Each licensee is
|
||||
addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also compile or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
c) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
d) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the source code distributed need not include anything that is normally
|
||||
distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Library General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Appendix: How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
196
ogl_editor/external/mxml/README
vendored
Normal file
196
ogl_editor/external/mxml/README
vendored
Normal file
@ -0,0 +1,196 @@
|
||||
README - 2011-12-20
|
||||
-------------------
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
This README file describes the Mini-XML library version 2.7.
|
||||
|
||||
Mini-XML is a small XML parsing library that you can use to read XML and
|
||||
XML-like data files in your application without requiring large non-standard
|
||||
libraries. Mini-XML only requires an ANSI C compatible compiler (GCC works,
|
||||
as do most vendors' ANSI C compilers) and a "make" program.
|
||||
|
||||
Mini-XML provides the following functionality:
|
||||
|
||||
- Reading of UTF-8 and UTF-16 and writing of UTF-8 encoded XML files and
|
||||
strings.
|
||||
- Data is stored in a linked-list tree structure, preserving the XML
|
||||
data hierarchy.
|
||||
- Supports arbitrary element names, attributes, and attribute values
|
||||
with no preset limits, just available memory.
|
||||
- Supports integer, real, opaque ("cdata"), and text data types in
|
||||
"leaf" nodes.
|
||||
- Functions for creating and managing trees of data.
|
||||
- "Find" and "walk" functions for easily locating and navigating trees
|
||||
of data.
|
||||
|
||||
Mini-XML doesn't do validation or other types of processing on the data
|
||||
based upon schema files or other sources of definition information.
|
||||
|
||||
|
||||
BUILDING Mini-XML
|
||||
|
||||
Mini-XML comes with an autoconf-based configure script; just type the
|
||||
following command to get things going:
|
||||
|
||||
./configure
|
||||
|
||||
The default install prefix is /usr/local, which can be overridden using the
|
||||
--prefix option:
|
||||
|
||||
./configure --prefix=/foo
|
||||
|
||||
Other configure options can be found using the --help option:
|
||||
|
||||
./configure --help
|
||||
|
||||
Once you have configured the software, type "make" to do the build and run
|
||||
the test program to verify that things are working, as follows:
|
||||
|
||||
make
|
||||
|
||||
If you are using Mini-XML under Microsoft Windows with Visual C++ 2008, use
|
||||
the included project files in the "vcnet" subdirectory to build the library
|
||||
instead.
|
||||
|
||||
|
||||
INSTALLING Mini-XML
|
||||
|
||||
The "install" target will install Mini-XML in the lib and include
|
||||
directories:
|
||||
|
||||
make install
|
||||
|
||||
Once you have installed it, use the "-lmxml" option to link your application
|
||||
against it.
|
||||
|
||||
|
||||
DOCUMENTATION
|
||||
|
||||
The documentation is available in the "doc" subdirectory in the files
|
||||
"mxml.html" (HTML) and "mxml.pdf" (PDF). You can also look at the
|
||||
"testmxml.c" and "mxmldoc.c" source files for examples of using Mini-XML.
|
||||
|
||||
Mini-XML provides a single header file which you include:
|
||||
|
||||
#include <mxml.h>
|
||||
|
||||
Nodes are defined by the "mxml_node_t" structure; the "type" member defines
|
||||
the node type (element, integer, opaque, real, or text) which determines
|
||||
which value you want to look at in the "value" union. New nodes can be
|
||||
created using the "mxmlNewElement()", "mxmlNewInteger()", "mxmlNewOpaque()",
|
||||
"mxmlNewReal()", and "mxmlNewText()" functions. Only elements can have
|
||||
child nodes, and the top node must be an element, usually "?xml".
|
||||
|
||||
You load an XML file using the "mxmlLoadFile()" function:
|
||||
|
||||
FILE *fp;
|
||||
mxml_node_t *tree;
|
||||
|
||||
fp = fopen("filename.xml", "r");
|
||||
tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
|
||||
fclose(fp);
|
||||
|
||||
Similarly, you save an XML file using the "mxmlSaveFile()" function:
|
||||
|
||||
FILE *fp;
|
||||
mxml_node_t *tree;
|
||||
|
||||
fp = fopen("filename.xml", "w");
|
||||
mxmlSaveFile(tree, fp, MXML_NO_CALLBACK);
|
||||
fclose(fp);
|
||||
|
||||
The "mxmlLoadString()", "mxmlSaveAllocString()", and "mxmlSaveString()"
|
||||
functions load XML node trees from and save XML node trees to strings:
|
||||
|
||||
char buffer[8192];
|
||||
char *ptr;
|
||||
mxml_node_t *tree;
|
||||
|
||||
...
|
||||
tree = mxmlLoadString(NULL, buffer, MXML_NO_CALLBACK);
|
||||
|
||||
...
|
||||
mxmlSaveString(tree, buffer, sizeof(buffer), MXML_NO_CALLBACK);
|
||||
|
||||
...
|
||||
ptr = mxmlSaveAllocString(tree, MXML_NO_CALLBACK);
|
||||
|
||||
You can find a named element/node using the "mxmlFindElement()" function:
|
||||
|
||||
mxml_node_t *node = mxmlFindElement(tree, tree, "name", "attr",
|
||||
"value", MXML_DESCEND);
|
||||
|
||||
The "name", "attr", and "value" arguments can be passed as NULL to act as
|
||||
wildcards, e.g.:
|
||||
|
||||
/* Find the first "a" element */
|
||||
node = mxmlFindElement(tree, tree, "a", NULL, NULL, MXML_DESCEND);
|
||||
|
||||
/* Find the first "a" element with "href" attribute */
|
||||
node = mxmlFindElement(tree, tree, "a", "href", NULL, MXML_DESCEND);
|
||||
|
||||
/* Find the first "a" element with "href" to a URL */
|
||||
node = mxmlFindElement(tree, tree, "a", "href",
|
||||
"http://www.minixml.org/",
|
||||
MXML_DESCEND);
|
||||
|
||||
/* Find the first element with a "src" attribute*/
|
||||
node = mxmlFindElement(tree, tree, NULL, "src", NULL, MXML_DESCEND);
|
||||
|
||||
/* Find the first element with a "src" = "foo.jpg" */
|
||||
node = mxmlFindElement(tree, tree, NULL, "src", "foo.jpg",
|
||||
MXML_DESCEND);
|
||||
|
||||
You can also iterate with the same function:
|
||||
|
||||
mxml_node_t *node;
|
||||
|
||||
for (node = mxmlFindElement(tree, tree, "name", NULL, NULL,
|
||||
MXML_DESCEND);
|
||||
node != NULL;
|
||||
node = mxmlFindElement(node, tree, "name", NULL, NULL,
|
||||
MXML_DESCEND))
|
||||
{
|
||||
... do something ...
|
||||
}
|
||||
|
||||
The "mxmlFindPath()" function finds the (first) value node under a specific
|
||||
element using a "path":
|
||||
|
||||
mxml_node_t *value = mxmlFindPath(tree, "path/to/*/foo/bar");
|
||||
|
||||
The "mxmlGetInteger()", "mxmlGetOpaque()", "mxmlGetReal()", and
|
||||
"mxmlGetText()" functions retrieve the value from a node:
|
||||
|
||||
mxml_node_t *node;
|
||||
|
||||
int intvalue = mxmlGetInteger(node);
|
||||
|
||||
const char *opaquevalue = mxmlGetOpaque(node);
|
||||
|
||||
double realvalue = mxmlGetReal(node);
|
||||
|
||||
int whitespacevalue;
|
||||
const char *textvalue = mxmlGetText(node, &whitespacevalue);
|
||||
|
||||
Finally, once you are done with the XML data, use the "mxmlDelete()"
|
||||
function to recursively free the memory that is used for a particular node
|
||||
or the entire tree:
|
||||
|
||||
mxmlDelete(tree);
|
||||
|
||||
|
||||
GETTING HELP AND REPORTING PROBLEMS
|
||||
|
||||
The Mini-XML web site provides access to a discussion forum and bug
|
||||
reporting page:
|
||||
|
||||
http://www.minixml.org/
|
||||
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
The Mini-XML library is Copyright 2003-2011 by Michael Sweet. License terms
|
||||
are described in the file "COPYING".
|
||||
102
ogl_editor/external/mxml/config.h
vendored
Normal file
102
ogl_editor/external/mxml/config.h
vendored
Normal file
@ -0,0 +1,102 @@
|
||||
/* config.h. Generated from config.h.in by configure. */
|
||||
/*
|
||||
* "$Id: config.h.in 408 2010-09-19 05:26:46Z mike $"
|
||||
*
|
||||
* Configuration file for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
/*
|
||||
* Version number...
|
||||
*/
|
||||
|
||||
#define MXML_VERSION "Mini-XML v2.7"
|
||||
|
||||
|
||||
/*
|
||||
* Inline function support...
|
||||
*/
|
||||
|
||||
#define inline
|
||||
|
||||
|
||||
/*
|
||||
* Long long support...
|
||||
*/
|
||||
|
||||
#define HAVE_LONG_LONG 1
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the snprintf() and vsnprintf() functions?
|
||||
*/
|
||||
|
||||
#if !defined(WIN32)
|
||||
#define HAVE_SNPRINTF 1
|
||||
#endif
|
||||
|
||||
|
||||
#define HAVE_VSNPRINTF 1
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the strXXX() functions?
|
||||
*/
|
||||
|
||||
#define HAVE_STRDUP 1
|
||||
|
||||
|
||||
/*
|
||||
* Do we have threading support?
|
||||
*/
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#define HAVE_PTHREAD_H 1
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Define prototypes for string functions as needed...
|
||||
*/
|
||||
|
||||
# ifndef HAVE_STRDUP
|
||||
extern char *_mxml_strdup(const char *);
|
||||
# define strdup _mxml_strdup
|
||||
# endif /* !HAVE_STRDUP */
|
||||
|
||||
extern char *_mxml_strdupf(const char *, ...);
|
||||
extern char *_mxml_vstrdupf(const char *, va_list);
|
||||
|
||||
# ifndef HAVE_SNPRINTF
|
||||
extern int _mxml_snprintf(char *, size_t, const char *, ...);
|
||||
# define snprintf _mxml_snprintf
|
||||
# endif /* !HAVE_SNPRINTF */
|
||||
|
||||
# ifndef HAVE_VSNPRINTF
|
||||
extern int _mxml_vsnprintf(char *, size_t, const char *, va_list);
|
||||
# define vsnprintf _mxml_vsnprintf
|
||||
# endif /* !HAVE_VSNPRINTF */
|
||||
|
||||
/*
|
||||
* End of "$Id: config.h.in 408 2010-09-19 05:26:46Z mike $".
|
||||
*/
|
||||
319
ogl_editor/external/mxml/mxml-attr.c
vendored
Normal file
319
ogl_editor/external/mxml/mxml-attr.c
vendored
Normal file
@ -0,0 +1,319 @@
|
||||
/*
|
||||
* "$Id: mxml-attr.c 408 2010-09-19 05:26:46Z mike $"
|
||||
*
|
||||
* Attribute support code for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlElementDeleteAttr() - Delete an attribute.
|
||||
* mxmlElementGetAttr() - Get an attribute.
|
||||
* mxmlElementSetAttr() - Set an attribute.
|
||||
* mxmlElementSetAttrf() - Set an attribute with a formatted value.
|
||||
* mxml_set_attr() - Set or add an attribute name/value pair.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static int mxml_set_attr(mxml_node_t *node, const char *name,
|
||||
char *value);
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlElementDeleteAttr()' - Delete an attribute.
|
||||
*
|
||||
* @since Mini-XML 2.4@
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlElementDeleteAttr(mxml_node_t *node,/* I - Element */
|
||||
const char *name)/* I - Attribute name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
mxml_attr_t *attr; /* Cirrent attribute */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlElementDeleteAttr(node=%p, name=\"%s\")\n",
|
||||
node, name ? name : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT || !name)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Look for the attribute...
|
||||
*/
|
||||
|
||||
for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
|
||||
i > 0;
|
||||
i --, attr ++)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
printf(" %s=\"%s\"\n", attr->name, attr->value);
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (!strcmp(attr->name, name))
|
||||
{
|
||||
/*
|
||||
* Delete this attribute...
|
||||
*/
|
||||
|
||||
free(attr->name);
|
||||
free(attr->value);
|
||||
|
||||
i --;
|
||||
if (i > 0)
|
||||
memmove(attr, attr + 1, i * sizeof(mxml_attr_t));
|
||||
|
||||
node->value.element.num_attrs --;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlElementGetAttr()' - Get an attribute.
|
||||
*
|
||||
* This function returns NULL if the node is not an element or the
|
||||
* named attribute does not exist.
|
||||
*/
|
||||
|
||||
const char * /* O - Attribute value or NULL */
|
||||
mxmlElementGetAttr(mxml_node_t *node, /* I - Element node */
|
||||
const char *name) /* I - Name of attribute */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
mxml_attr_t *attr; /* Cirrent attribute */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlElementGetAttr(node=%p, name=\"%s\")\n",
|
||||
node, name ? name : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT || !name)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Look for the attribute...
|
||||
*/
|
||||
|
||||
for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
|
||||
i > 0;
|
||||
i --, attr ++)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
printf(" %s=\"%s\"\n", attr->name, attr->value);
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (!strcmp(attr->name, name))
|
||||
{
|
||||
#ifdef DEBUG
|
||||
printf(" Returning \"%s\"!\n", attr->value);
|
||||
#endif /* DEBUG */
|
||||
return (attr->value);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Didn't find attribute, so return NULL...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
puts(" Returning NULL!\n");
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlElementSetAttr()' - Set an attribute.
|
||||
*
|
||||
* If the named attribute already exists, the value of the attribute
|
||||
* is replaced by the new string value. The string value is copied
|
||||
* into the element node. This function does nothing if the node is
|
||||
* not an element.
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlElementSetAttr(mxml_node_t *node, /* I - Element node */
|
||||
const char *name, /* I - Name of attribute */
|
||||
const char *value) /* I - Attribute value */
|
||||
{
|
||||
char *valuec; /* Copy of value */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlElementSetAttr(node=%p, name=\"%s\", value=\"%s\")\n",
|
||||
node, name ? name : "(null)", value ? value : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT || !name)
|
||||
return;
|
||||
|
||||
if (value)
|
||||
valuec = strdup(value);
|
||||
else
|
||||
valuec = NULL;
|
||||
|
||||
if (mxml_set_attr(node, name, valuec))
|
||||
free(valuec);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlElementSetAttrf()' - Set an attribute with a formatted value.
|
||||
*
|
||||
* If the named attribute already exists, the value of the attribute
|
||||
* is replaced by the new formatted string. The formatted string value is
|
||||
* copied into the element node. This function does nothing if the node
|
||||
* is not an element.
|
||||
*
|
||||
* @since Mini-XML 2.3@
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlElementSetAttrf(mxml_node_t *node, /* I - Element node */
|
||||
const char *name, /* I - Name of attribute */
|
||||
const char *format,/* I - Printf-style attribute value */
|
||||
...) /* I - Additional arguments as needed */
|
||||
{
|
||||
va_list ap; /* Argument pointer */
|
||||
char *value; /* Value */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr,
|
||||
"mxmlElementSetAttrf(node=%p, name=\"%s\", format=\"%s\", ...)\n",
|
||||
node, name ? name : "(null)", format ? format : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT || !name || !format)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Format the value...
|
||||
*/
|
||||
|
||||
va_start(ap, format);
|
||||
value = _mxml_vstrdupf(format, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (!value)
|
||||
mxml_error("Unable to allocate memory for attribute '%s' in element %s!",
|
||||
name, node->value.element.name);
|
||||
else if (mxml_set_attr(node, name, value))
|
||||
free(value);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_set_attr()' - Set or add an attribute name/value pair.
|
||||
*/
|
||||
|
||||
static int /* O - 0 on success, -1 on failure */
|
||||
mxml_set_attr(mxml_node_t *node, /* I - Element node */
|
||||
const char *name, /* I - Attribute name */
|
||||
char *value) /* I - Attribute value */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
mxml_attr_t *attr; /* New attribute */
|
||||
|
||||
|
||||
/*
|
||||
* Look for the attribute...
|
||||
*/
|
||||
|
||||
for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
|
||||
i > 0;
|
||||
i --, attr ++)
|
||||
if (!strcmp(attr->name, name))
|
||||
{
|
||||
/*
|
||||
* Free the old value as needed...
|
||||
*/
|
||||
|
||||
if (attr->value)
|
||||
free(attr->value);
|
||||
|
||||
attr->value = value;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a new attribute...
|
||||
*/
|
||||
|
||||
if (node->value.element.num_attrs == 0)
|
||||
attr = malloc(sizeof(mxml_attr_t));
|
||||
else
|
||||
attr = realloc(node->value.element.attrs,
|
||||
(node->value.element.num_attrs + 1) * sizeof(mxml_attr_t));
|
||||
|
||||
if (!attr)
|
||||
{
|
||||
mxml_error("Unable to allocate memory for attribute '%s' in element %s!",
|
||||
name, node->value.element.name);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
node->value.element.attrs = attr;
|
||||
attr += node->value.element.num_attrs;
|
||||
|
||||
if ((attr->name = strdup(name)) == NULL)
|
||||
{
|
||||
mxml_error("Unable to allocate memory for attribute '%s' in element %s!",
|
||||
name, node->value.element.name);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
attr->value = value;
|
||||
|
||||
node->value.element.num_attrs ++;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-attr.c 408 2010-09-19 05:26:46Z mike $".
|
||||
*/
|
||||
460
ogl_editor/external/mxml/mxml-entity.c
vendored
Normal file
460
ogl_editor/external/mxml/mxml-entity.c
vendored
Normal file
@ -0,0 +1,460 @@
|
||||
/*
|
||||
* "$Id: mxml-entity.c 408 2010-09-19 05:26:46Z mike $"
|
||||
*
|
||||
* Character entity support code for Mini-XML, a small XML-like
|
||||
* file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlEntityAddCallback() - Add a callback to convert entities to
|
||||
* Unicode.
|
||||
* mxmlEntityGetName() - Get the name that corresponds to the
|
||||
* character value.
|
||||
* mxmlEntityGetValue() - Get the character corresponding to a named
|
||||
* entity.
|
||||
* mxmlEntityRemoveCallback() - Remove a callback.
|
||||
* _mxml_entity_cb() - Lookup standard (X)HTML entities.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "mxml-private.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlEntityAddCallback()' - Add a callback to convert entities to Unicode.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlEntityAddCallback(
|
||||
mxml_entity_cb_t cb) /* I - Callback function to add */
|
||||
{
|
||||
_mxml_global_t *global = _mxml_global();
|
||||
/* Global data */
|
||||
|
||||
|
||||
if (global->num_entity_cbs < (int)(sizeof(global->entity_cbs) / sizeof(global->entity_cbs[0])))
|
||||
{
|
||||
global->entity_cbs[global->num_entity_cbs] = cb;
|
||||
global->num_entity_cbs ++;
|
||||
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
mxml_error("Unable to add entity callback!");
|
||||
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlEntityGetName()' - Get the name that corresponds to the character value.
|
||||
*
|
||||
* If val does not need to be represented by a named entity, NULL is returned.
|
||||
*/
|
||||
|
||||
const char * /* O - Entity name or NULL */
|
||||
mxmlEntityGetName(int val) /* I - Character value */
|
||||
{
|
||||
switch (val)
|
||||
{
|
||||
case '&' :
|
||||
return ("amp");
|
||||
|
||||
case '<' :
|
||||
return ("lt");
|
||||
|
||||
case '>' :
|
||||
return ("gt");
|
||||
|
||||
case '\"' :
|
||||
return ("quot");
|
||||
|
||||
default :
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlEntityGetValue()' - Get the character corresponding to a named entity.
|
||||
*
|
||||
* The entity name can also be a numeric constant. -1 is returned if the
|
||||
* name is not known.
|
||||
*/
|
||||
|
||||
int /* O - Character value or -1 on error */
|
||||
mxmlEntityGetValue(const char *name) /* I - Entity name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int ch; /* Character value */
|
||||
_mxml_global_t *global = _mxml_global();
|
||||
/* Global data */
|
||||
|
||||
|
||||
for (i = 0; i < global->num_entity_cbs; i ++)
|
||||
if ((ch = (global->entity_cbs[i])(name)) >= 0)
|
||||
return (ch);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlEntityRemoveCallback()' - Remove a callback.
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlEntityRemoveCallback(
|
||||
mxml_entity_cb_t cb) /* I - Callback function to remove */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
_mxml_global_t *global = _mxml_global();
|
||||
/* Global data */
|
||||
|
||||
|
||||
for (i = 0; i < global->num_entity_cbs; i ++)
|
||||
if (cb == global->entity_cbs[i])
|
||||
{
|
||||
/*
|
||||
* Remove the callback...
|
||||
*/
|
||||
|
||||
global->num_entity_cbs --;
|
||||
|
||||
if (i < global->num_entity_cbs)
|
||||
memmove(global->entity_cbs + i, global->entity_cbs + i + 1,
|
||||
(global->num_entity_cbs - i) * sizeof(global->entity_cbs[0]));
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_entity_cb()' - Lookup standard (X)HTML entities.
|
||||
*/
|
||||
|
||||
int /* O - Unicode value or -1 */
|
||||
_mxml_entity_cb(const char *name) /* I - Entity name */
|
||||
{
|
||||
int diff, /* Difference between names */
|
||||
current, /* Current entity in search */
|
||||
first, /* First entity in search */
|
||||
last; /* Last entity in search */
|
||||
static const struct
|
||||
{
|
||||
const char *name; /* Entity name */
|
||||
int val; /* Character value */
|
||||
} entities[] =
|
||||
{
|
||||
{ "AElig", 198 },
|
||||
{ "Aacute", 193 },
|
||||
{ "Acirc", 194 },
|
||||
{ "Agrave", 192 },
|
||||
{ "Alpha", 913 },
|
||||
{ "Aring", 197 },
|
||||
{ "Atilde", 195 },
|
||||
{ "Auml", 196 },
|
||||
{ "Beta", 914 },
|
||||
{ "Ccedil", 199 },
|
||||
{ "Chi", 935 },
|
||||
{ "Dagger", 8225 },
|
||||
{ "Delta", 916 },
|
||||
{ "Dstrok", 208 },
|
||||
{ "ETH", 208 },
|
||||
{ "Eacute", 201 },
|
||||
{ "Ecirc", 202 },
|
||||
{ "Egrave", 200 },
|
||||
{ "Epsilon", 917 },
|
||||
{ "Eta", 919 },
|
||||
{ "Euml", 203 },
|
||||
{ "Gamma", 915 },
|
||||
{ "Iacute", 205 },
|
||||
{ "Icirc", 206 },
|
||||
{ "Igrave", 204 },
|
||||
{ "Iota", 921 },
|
||||
{ "Iuml", 207 },
|
||||
{ "Kappa", 922 },
|
||||
{ "Lambda", 923 },
|
||||
{ "Mu", 924 },
|
||||
{ "Ntilde", 209 },
|
||||
{ "Nu", 925 },
|
||||
{ "OElig", 338 },
|
||||
{ "Oacute", 211 },
|
||||
{ "Ocirc", 212 },
|
||||
{ "Ograve", 210 },
|
||||
{ "Omega", 937 },
|
||||
{ "Omicron", 927 },
|
||||
{ "Oslash", 216 },
|
||||
{ "Otilde", 213 },
|
||||
{ "Ouml", 214 },
|
||||
{ "Phi", 934 },
|
||||
{ "Pi", 928 },
|
||||
{ "Prime", 8243 },
|
||||
{ "Psi", 936 },
|
||||
{ "Rho", 929 },
|
||||
{ "Scaron", 352 },
|
||||
{ "Sigma", 931 },
|
||||
{ "THORN", 222 },
|
||||
{ "Tau", 932 },
|
||||
{ "Theta", 920 },
|
||||
{ "Uacute", 218 },
|
||||
{ "Ucirc", 219 },
|
||||
{ "Ugrave", 217 },
|
||||
{ "Upsilon", 933 },
|
||||
{ "Uuml", 220 },
|
||||
{ "Xi", 926 },
|
||||
{ "Yacute", 221 },
|
||||
{ "Yuml", 376 },
|
||||
{ "Zeta", 918 },
|
||||
{ "aacute", 225 },
|
||||
{ "acirc", 226 },
|
||||
{ "acute", 180 },
|
||||
{ "aelig", 230 },
|
||||
{ "agrave", 224 },
|
||||
{ "alefsym", 8501 },
|
||||
{ "alpha", 945 },
|
||||
{ "amp", '&' },
|
||||
{ "and", 8743 },
|
||||
{ "ang", 8736 },
|
||||
{ "apos", '\'' },
|
||||
{ "aring", 229 },
|
||||
{ "asymp", 8776 },
|
||||
{ "atilde", 227 },
|
||||
{ "auml", 228 },
|
||||
{ "bdquo", 8222 },
|
||||
{ "beta", 946 },
|
||||
{ "brkbar", 166 },
|
||||
{ "brvbar", 166 },
|
||||
{ "bull", 8226 },
|
||||
{ "cap", 8745 },
|
||||
{ "ccedil", 231 },
|
||||
{ "cedil", 184 },
|
||||
{ "cent", 162 },
|
||||
{ "chi", 967 },
|
||||
{ "circ", 710 },
|
||||
{ "clubs", 9827 },
|
||||
{ "cong", 8773 },
|
||||
{ "copy", 169 },
|
||||
{ "crarr", 8629 },
|
||||
{ "cup", 8746 },
|
||||
{ "curren", 164 },
|
||||
{ "dArr", 8659 },
|
||||
{ "dagger", 8224 },
|
||||
{ "darr", 8595 },
|
||||
{ "deg", 176 },
|
||||
{ "delta", 948 },
|
||||
{ "diams", 9830 },
|
||||
{ "die", 168 },
|
||||
{ "divide", 247 },
|
||||
{ "eacute", 233 },
|
||||
{ "ecirc", 234 },
|
||||
{ "egrave", 232 },
|
||||
{ "empty", 8709 },
|
||||
{ "emsp", 8195 },
|
||||
{ "ensp", 8194 },
|
||||
{ "epsilon", 949 },
|
||||
{ "equiv", 8801 },
|
||||
{ "eta", 951 },
|
||||
{ "eth", 240 },
|
||||
{ "euml", 235 },
|
||||
{ "euro", 8364 },
|
||||
{ "exist", 8707 },
|
||||
{ "fnof", 402 },
|
||||
{ "forall", 8704 },
|
||||
{ "frac12", 189 },
|
||||
{ "frac14", 188 },
|
||||
{ "frac34", 190 },
|
||||
{ "frasl", 8260 },
|
||||
{ "gamma", 947 },
|
||||
{ "ge", 8805 },
|
||||
{ "gt", '>' },
|
||||
{ "hArr", 8660 },
|
||||
{ "harr", 8596 },
|
||||
{ "hearts", 9829 },
|
||||
{ "hellip", 8230 },
|
||||
{ "hibar", 175 },
|
||||
{ "iacute", 237 },
|
||||
{ "icirc", 238 },
|
||||
{ "iexcl", 161 },
|
||||
{ "igrave", 236 },
|
||||
{ "image", 8465 },
|
||||
{ "infin", 8734 },
|
||||
{ "int", 8747 },
|
||||
{ "iota", 953 },
|
||||
{ "iquest", 191 },
|
||||
{ "isin", 8712 },
|
||||
{ "iuml", 239 },
|
||||
{ "kappa", 954 },
|
||||
{ "lArr", 8656 },
|
||||
{ "lambda", 955 },
|
||||
{ "lang", 9001 },
|
||||
{ "laquo", 171 },
|
||||
{ "larr", 8592 },
|
||||
{ "lceil", 8968 },
|
||||
{ "ldquo", 8220 },
|
||||
{ "le", 8804 },
|
||||
{ "lfloor", 8970 },
|
||||
{ "lowast", 8727 },
|
||||
{ "loz", 9674 },
|
||||
{ "lrm", 8206 },
|
||||
{ "lsaquo", 8249 },
|
||||
{ "lsquo", 8216 },
|
||||
{ "lt", '<' },
|
||||
{ "macr", 175 },
|
||||
{ "mdash", 8212 },
|
||||
{ "micro", 181 },
|
||||
{ "middot", 183 },
|
||||
{ "minus", 8722 },
|
||||
{ "mu", 956 },
|
||||
{ "nabla", 8711 },
|
||||
{ "nbsp", 160 },
|
||||
{ "ndash", 8211 },
|
||||
{ "ne", 8800 },
|
||||
{ "ni", 8715 },
|
||||
{ "not", 172 },
|
||||
{ "notin", 8713 },
|
||||
{ "nsub", 8836 },
|
||||
{ "ntilde", 241 },
|
||||
{ "nu", 957 },
|
||||
{ "oacute", 243 },
|
||||
{ "ocirc", 244 },
|
||||
{ "oelig", 339 },
|
||||
{ "ograve", 242 },
|
||||
{ "oline", 8254 },
|
||||
{ "omega", 969 },
|
||||
{ "omicron", 959 },
|
||||
{ "oplus", 8853 },
|
||||
{ "or", 8744 },
|
||||
{ "ordf", 170 },
|
||||
{ "ordm", 186 },
|
||||
{ "oslash", 248 },
|
||||
{ "otilde", 245 },
|
||||
{ "otimes", 8855 },
|
||||
{ "ouml", 246 },
|
||||
{ "para", 182 },
|
||||
{ "part", 8706 },
|
||||
{ "permil", 8240 },
|
||||
{ "perp", 8869 },
|
||||
{ "phi", 966 },
|
||||
{ "pi", 960 },
|
||||
{ "piv", 982 },
|
||||
{ "plusmn", 177 },
|
||||
{ "pound", 163 },
|
||||
{ "prime", 8242 },
|
||||
{ "prod", 8719 },
|
||||
{ "prop", 8733 },
|
||||
{ "psi", 968 },
|
||||
{ "quot", '\"' },
|
||||
{ "rArr", 8658 },
|
||||
{ "radic", 8730 },
|
||||
{ "rang", 9002 },
|
||||
{ "raquo", 187 },
|
||||
{ "rarr", 8594 },
|
||||
{ "rceil", 8969 },
|
||||
{ "rdquo", 8221 },
|
||||
{ "real", 8476 },
|
||||
{ "reg", 174 },
|
||||
{ "rfloor", 8971 },
|
||||
{ "rho", 961 },
|
||||
{ "rlm", 8207 },
|
||||
{ "rsaquo", 8250 },
|
||||
{ "rsquo", 8217 },
|
||||
{ "sbquo", 8218 },
|
||||
{ "scaron", 353 },
|
||||
{ "sdot", 8901 },
|
||||
{ "sect", 167 },
|
||||
{ "shy", 173 },
|
||||
{ "sigma", 963 },
|
||||
{ "sigmaf", 962 },
|
||||
{ "sim", 8764 },
|
||||
{ "spades", 9824 },
|
||||
{ "sub", 8834 },
|
||||
{ "sube", 8838 },
|
||||
{ "sum", 8721 },
|
||||
{ "sup", 8835 },
|
||||
{ "sup1", 185 },
|
||||
{ "sup2", 178 },
|
||||
{ "sup3", 179 },
|
||||
{ "supe", 8839 },
|
||||
{ "szlig", 223 },
|
||||
{ "tau", 964 },
|
||||
{ "there4", 8756 },
|
||||
{ "theta", 952 },
|
||||
{ "thetasym", 977 },
|
||||
{ "thinsp", 8201 },
|
||||
{ "thorn", 254 },
|
||||
{ "tilde", 732 },
|
||||
{ "times", 215 },
|
||||
{ "trade", 8482 },
|
||||
{ "uArr", 8657 },
|
||||
{ "uacute", 250 },
|
||||
{ "uarr", 8593 },
|
||||
{ "ucirc", 251 },
|
||||
{ "ugrave", 249 },
|
||||
{ "uml", 168 },
|
||||
{ "upsih", 978 },
|
||||
{ "upsilon", 965 },
|
||||
{ "uuml", 252 },
|
||||
{ "weierp", 8472 },
|
||||
{ "xi", 958 },
|
||||
{ "yacute", 253 },
|
||||
{ "yen", 165 },
|
||||
{ "yuml", 255 },
|
||||
{ "zeta", 950 },
|
||||
{ "zwj", 8205 },
|
||||
{ "zwnj", 8204 }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Do a binary search for the named entity...
|
||||
*/
|
||||
|
||||
first = 0;
|
||||
last = (int)(sizeof(entities) / sizeof(entities[0]) - 1);
|
||||
|
||||
while ((last - first) > 1)
|
||||
{
|
||||
current = (first + last) / 2;
|
||||
|
||||
if ((diff = strcmp(name, entities[current].name)) == 0)
|
||||
return (entities[current].val);
|
||||
else if (diff < 0)
|
||||
last = current;
|
||||
else
|
||||
first = current;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we get here, there is a small chance that there is still
|
||||
* a match; check first and last...
|
||||
*/
|
||||
|
||||
if (!strcmp(name, entities[first].name))
|
||||
return (entities[first].val);
|
||||
else if (!strcmp(name, entities[last].name))
|
||||
return (entities[last].val);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-entity.c 408 2010-09-19 05:26:46Z mike $".
|
||||
*/
|
||||
3080
ogl_editor/external/mxml/mxml-file.c
vendored
Normal file
3080
ogl_editor/external/mxml/mxml-file.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
471
ogl_editor/external/mxml/mxml-get.c
vendored
Normal file
471
ogl_editor/external/mxml/mxml-get.c
vendored
Normal file
@ -0,0 +1,471 @@
|
||||
/*
|
||||
* "$Id: mxml-get.c 427 2011-01-03 02:03:29Z mike $"
|
||||
*
|
||||
* Node get functions for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2011 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlGetCDATA() - Get the value for a CDATA node.
|
||||
* mxmlGetCustom() - Get the value for a custom node.
|
||||
* mxmlGetElement() - Get the name for an element node.
|
||||
* mxmlGetFirstChild() - Get the first child of an element node.
|
||||
* mxmlGetInteger() - Get the integer value from the specified node or its
|
||||
* first child.
|
||||
* mxmlGetLastChild() - Get the last child of an element node.
|
||||
* mxmlGetNextSibling() - Get the next node for the current parent.
|
||||
* mxmlGetOpaque() - Get an opaque string value for a node or its first
|
||||
* child.
|
||||
* mxmlGetParent() - Get the parent node.
|
||||
* mxmlGetPrevSibling() - Get the previous node for the current parent.
|
||||
* mxmlGetReal() - Get the real value for a node or its first child.
|
||||
* mxmlGetText() - Get the text value for a node or its first child.
|
||||
* mxmlGetType() - Get the node type.
|
||||
* mxmlGetUserData() - Get the user data pointer for a node.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetCDATA()' - Get the value for a CDATA node.
|
||||
*
|
||||
* @code NULL@ is returned if the node is not a CDATA element.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
const char * /* O - CDATA value or NULL */
|
||||
mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT ||
|
||||
strncmp(node->value.element.name, "![CDATA[", 8))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the text following the CDATA declaration...
|
||||
*/
|
||||
|
||||
return (node->value.element.name + 8);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetCustom()' - Get the value for a custom node.
|
||||
*
|
||||
* @code NULL@ is returned if the node (or its first child) is not a custom
|
||||
* value node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
const void * /* O - Custom value or NULL */
|
||||
mxmlGetCustom(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the integer value...
|
||||
*/
|
||||
|
||||
if (node->type == MXML_CUSTOM)
|
||||
return (node->value.custom.data);
|
||||
else if (node->type == MXML_ELEMENT &&
|
||||
node->child &&
|
||||
node->child->type == MXML_CUSTOM)
|
||||
return (node->child->value.custom.data);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetElement()' - Get the name for an element node.
|
||||
*
|
||||
* @code NULL@ is returned if the node is not an element node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
const char * /* O - Element name or NULL */
|
||||
mxmlGetElement(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the element name...
|
||||
*/
|
||||
|
||||
return (node->value.element.name);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetFirstChild()' - Get the first child of an element node.
|
||||
*
|
||||
* @code NULL@ is returned if the node is not an element node or if the node
|
||||
* has no children.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - First child or NULL */
|
||||
mxmlGetFirstChild(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the first child node...
|
||||
*/
|
||||
|
||||
return (node->child);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetInteger()' - Get the integer value from the specified node or its
|
||||
* first child.
|
||||
*
|
||||
* 0 is returned if the node (or its first child) is not an integer value node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
int /* O - Integer value or 0 */
|
||||
mxmlGetInteger(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Return the integer value...
|
||||
*/
|
||||
|
||||
if (node->type == MXML_INTEGER)
|
||||
return (node->value.integer);
|
||||
else if (node->type == MXML_ELEMENT &&
|
||||
node->child &&
|
||||
node->child->type == MXML_INTEGER)
|
||||
return (node->child->value.integer);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetLastChild()' - Get the last child of an element node.
|
||||
*
|
||||
* @code NULL@ is returned if the node is not an element node or if the node
|
||||
* has no children.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Last child or NULL */
|
||||
mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the node type...
|
||||
*/
|
||||
|
||||
return (node->last_child);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetNextSibling()' - Get the next node for the current parent.
|
||||
*
|
||||
* @code NULL@ is returned if this is the last child for the current parent.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t *
|
||||
mxmlGetNextSibling(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the node type...
|
||||
*/
|
||||
|
||||
return (node->next);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetOpaque()' - Get an opaque string value for a node or its first child.
|
||||
*
|
||||
* @code NULL@ is returned if the node (or its first child) is not an opaque
|
||||
* value node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
const char * /* O - Opaque string or NULL */
|
||||
mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the integer value...
|
||||
*/
|
||||
|
||||
if (node->type == MXML_OPAQUE)
|
||||
return (node->value.opaque);
|
||||
else if (node->type == MXML_ELEMENT &&
|
||||
node->child &&
|
||||
node->child->type == MXML_OPAQUE)
|
||||
return (node->child->value.opaque);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetParent()' - Get the parent node.
|
||||
*
|
||||
* @code NULL@ is returned for a root node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Parent node or NULL */
|
||||
mxmlGetParent(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the node type...
|
||||
*/
|
||||
|
||||
return (node->parent);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetPrevSibling()' - Get the previous node for the current parent.
|
||||
*
|
||||
* @code NULL@ is returned if this is the first child for the current parent.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Previous node or NULL */
|
||||
mxmlGetPrevSibling(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the node type...
|
||||
*/
|
||||
|
||||
return (node->prev);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetReal()' - Get the real value for a node or its first child.
|
||||
*
|
||||
* 0.0 is returned if the node (or its first child) is not a real value node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
double /* O - Real value or 0.0 */
|
||||
mxmlGetReal(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (0.0);
|
||||
|
||||
/*
|
||||
* Return the integer value...
|
||||
*/
|
||||
|
||||
if (node->type == MXML_REAL)
|
||||
return (node->value.real);
|
||||
else if (node->type == MXML_ELEMENT &&
|
||||
node->child &&
|
||||
node->child->type == MXML_REAL)
|
||||
return (node->child->value.real);
|
||||
else
|
||||
return (0.0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetText()' - Get the text value for a node or its first child.
|
||||
*
|
||||
* @code NULL@ is returned if the node (or its first child) is not a text node.
|
||||
* The "whitespace" argument can be NULL.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
const char * /* O - Text string or NULL */
|
||||
mxmlGetText(mxml_node_t *node, /* I - Node to get */
|
||||
int *whitespace) /* O - 1 if string is preceded by whitespace, 0 otherwise */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
{
|
||||
if (whitespace)
|
||||
*whitespace = 0;
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the integer value...
|
||||
*/
|
||||
|
||||
if (node->type == MXML_TEXT)
|
||||
{
|
||||
if (whitespace)
|
||||
*whitespace = node->value.text.whitespace;
|
||||
|
||||
return (node->value.text.string);
|
||||
}
|
||||
else if (node->type == MXML_ELEMENT &&
|
||||
node->child &&
|
||||
node->child->type == MXML_TEXT)
|
||||
{
|
||||
if (whitespace)
|
||||
*whitespace = node->child->value.text.whitespace;
|
||||
|
||||
return (node->child->value.text.string);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (whitespace)
|
||||
*whitespace = 0;
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetType()' - Get the node type.
|
||||
*
|
||||
* @code MXML_IGNORE@ is returned if "node" is @code NULL@.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_type_t /* O - Type of node */
|
||||
mxmlGetType(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (MXML_IGNORE);
|
||||
|
||||
/*
|
||||
* Return the node type...
|
||||
*/
|
||||
|
||||
return (node->type);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetUserData()' - Get the user data pointer for a node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
void * /* O - User data pointer */
|
||||
mxmlGetUserData(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the user data pointer...
|
||||
*/
|
||||
|
||||
return (node->user_data);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-get.c 427 2011-01-03 02:03:29Z mike $".
|
||||
*/
|
||||
662
ogl_editor/external/mxml/mxml-index.c
vendored
Normal file
662
ogl_editor/external/mxml/mxml-index.c
vendored
Normal file
@ -0,0 +1,662 @@
|
||||
/*
|
||||
* "$Id: mxml-index.c 426 2011-01-01 23:42:17Z mike $"
|
||||
*
|
||||
* Index support code for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2011 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* Sort functions...
|
||||
*/
|
||||
|
||||
static int index_compare(mxml_index_t *ind, mxml_node_t *first,
|
||||
mxml_node_t *second);
|
||||
static int index_find(mxml_index_t *ind, const char *element,
|
||||
const char *value, mxml_node_t *node);
|
||||
static void index_sort(mxml_index_t *ind, int left, int right);
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlIndexDelete()' - Delete an index.
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlIndexDelete(mxml_index_t *ind) /* I - Index to delete */
|
||||
{
|
||||
/*
|
||||
* Range check input..
|
||||
*/
|
||||
|
||||
if (!ind)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Free memory...
|
||||
*/
|
||||
|
||||
if (ind->attr)
|
||||
free(ind->attr);
|
||||
|
||||
if (ind->alloc_nodes)
|
||||
free(ind->nodes);
|
||||
|
||||
free(ind);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlIndexEnum()' - Return the next node in the index.
|
||||
*
|
||||
* Nodes are returned in the sorted order of the index.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Next node or NULL if there is none */
|
||||
mxmlIndexEnum(mxml_index_t *ind) /* I - Index to enumerate */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ind)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Return the next node...
|
||||
*/
|
||||
|
||||
if (ind->cur_node < ind->num_nodes)
|
||||
return (ind->nodes[ind->cur_node ++]);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlIndexFind()' - Find the next matching node.
|
||||
*
|
||||
* You should call mxmlIndexReset() prior to using this function for
|
||||
* the first time with a particular set of "element" and "value"
|
||||
* strings. Passing NULL for both "element" and "value" is equivalent
|
||||
* to calling mxmlIndexEnum().
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Node or NULL if none found */
|
||||
mxmlIndexFind(mxml_index_t *ind, /* I - Index to search */
|
||||
const char *element, /* I - Element name to find, if any */
|
||||
const char *value) /* I - Attribute value, if any */
|
||||
{
|
||||
int diff, /* Difference between names */
|
||||
current, /* Current entity in search */
|
||||
first, /* First entity in search */
|
||||
last; /* Last entity in search */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("mxmlIndexFind(ind=%p, element=\"%s\", value=\"%s\")\n",
|
||||
ind, element ? element : "(null)", value ? value : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ind || (!ind->attr && value))
|
||||
{
|
||||
#ifdef DEBUG
|
||||
puts(" returning NULL...");
|
||||
printf(" ind->attr=\"%s\"\n", ind->attr ? ind->attr : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* If both element and value are NULL, just enumerate the nodes in the
|
||||
* index...
|
||||
*/
|
||||
|
||||
if (!element && !value)
|
||||
return (mxmlIndexEnum(ind));
|
||||
|
||||
/*
|
||||
* If there are no nodes in the index, return NULL...
|
||||
*/
|
||||
|
||||
if (!ind->num_nodes)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
puts(" returning NULL...");
|
||||
puts(" no nodes!");
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* If cur_node == 0, then find the first matching node...
|
||||
*/
|
||||
|
||||
if (ind->cur_node == 0)
|
||||
{
|
||||
/*
|
||||
* Find the first node using a modified binary search algorithm...
|
||||
*/
|
||||
|
||||
first = 0;
|
||||
last = ind->num_nodes - 1;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" find first time, num_nodes=%d...\n", ind->num_nodes);
|
||||
#endif /* DEBUG */
|
||||
|
||||
while ((last - first) > 1)
|
||||
{
|
||||
current = (first + last) / 2;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" first=%d, last=%d, current=%d\n", first, last, current);
|
||||
#endif /* DEBUG */
|
||||
|
||||
if ((diff = index_find(ind, element, value, ind->nodes[current])) == 0)
|
||||
{
|
||||
/*
|
||||
* Found a match, move back to find the first...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
puts(" match!");
|
||||
#endif /* DEBUG */
|
||||
|
||||
while (current > 0 &&
|
||||
!index_find(ind, element, value, ind->nodes[current - 1]))
|
||||
current --;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" returning first match=%d\n", current);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Return the first match and save the index to the next...
|
||||
*/
|
||||
|
||||
ind->cur_node = current + 1;
|
||||
|
||||
return (ind->nodes[current]);
|
||||
}
|
||||
else if (diff < 0)
|
||||
last = current;
|
||||
else
|
||||
first = current;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" diff=%d\n", diff);
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
/*
|
||||
* If we get this far, then we found exactly 0 or 1 matches...
|
||||
*/
|
||||
|
||||
for (current = first; current <= last; current ++)
|
||||
if (!index_find(ind, element, value, ind->nodes[current]))
|
||||
{
|
||||
/*
|
||||
* Found exactly one (or possibly two) match...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" returning only match %d...\n", current);
|
||||
#endif /* DEBUG */
|
||||
|
||||
ind->cur_node = current + 1;
|
||||
|
||||
return (ind->nodes[current]);
|
||||
}
|
||||
|
||||
/*
|
||||
* No matches...
|
||||
*/
|
||||
|
||||
ind->cur_node = ind->num_nodes;
|
||||
|
||||
#ifdef DEBUG
|
||||
puts(" returning NULL...");
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
else if (ind->cur_node < ind->num_nodes &&
|
||||
!index_find(ind, element, value, ind->nodes[ind->cur_node]))
|
||||
{
|
||||
/*
|
||||
* Return the next matching node...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" returning next match %d...\n", ind->cur_node);
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (ind->nodes[ind->cur_node ++]);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we get this far, then we have no matches...
|
||||
*/
|
||||
|
||||
ind->cur_node = ind->num_nodes;
|
||||
|
||||
#ifdef DEBUG
|
||||
puts(" returning NULL...");
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlIndexGetCount()' - Get the number of nodes in an index.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
int /* I - Number of nodes in index */
|
||||
mxmlIndexGetCount(mxml_index_t *ind) /* I - Index of nodes */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ind)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Return the number of nodes in the index...
|
||||
*/
|
||||
|
||||
return (ind->num_nodes);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlIndexNew()' - Create a new index.
|
||||
*
|
||||
* The index will contain all nodes that contain the named element and/or
|
||||
* attribute. If both "element" and "attr" are NULL, then the index will
|
||||
* contain a sorted list of the elements in the node tree. Nodes are
|
||||
* sorted by element name and optionally by attribute value if the "attr"
|
||||
* argument is not NULL.
|
||||
*/
|
||||
|
||||
mxml_index_t * /* O - New index */
|
||||
mxmlIndexNew(mxml_node_t *node, /* I - XML node tree */
|
||||
const char *element, /* I - Element to index or NULL for all */
|
||||
const char *attr) /* I - Attribute to index or NULL for none */
|
||||
{
|
||||
mxml_index_t *ind; /* New index */
|
||||
mxml_node_t *current, /* Current node in index */
|
||||
**temp; /* Temporary node pointer array */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("mxmlIndexNew(node=%p, element=\"%s\", attr=\"%s\")\n",
|
||||
node, element ? element : "(null)", attr ? attr : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (!node)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Create a new index...
|
||||
*/
|
||||
|
||||
if ((ind = calloc(1, sizeof(mxml_index_t))) == NULL)
|
||||
{
|
||||
mxml_error("Unable to allocate %d bytes for index - %s",
|
||||
sizeof(mxml_index_t), strerror(errno));
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (attr)
|
||||
ind->attr = strdup(attr);
|
||||
|
||||
if (!element && !attr)
|
||||
current = node;
|
||||
else
|
||||
current = mxmlFindElement(node, node, element, attr, NULL, MXML_DESCEND);
|
||||
|
||||
while (current)
|
||||
{
|
||||
if (ind->num_nodes >= ind->alloc_nodes)
|
||||
{
|
||||
if (!ind->alloc_nodes)
|
||||
temp = malloc(64 * sizeof(mxml_node_t *));
|
||||
else
|
||||
temp = realloc(ind->nodes, (ind->alloc_nodes + 64) * sizeof(mxml_node_t *));
|
||||
|
||||
if (!temp)
|
||||
{
|
||||
/*
|
||||
* Unable to allocate memory for the index, so abort...
|
||||
*/
|
||||
|
||||
mxml_error("Unable to allocate %d bytes for index: %s",
|
||||
(ind->alloc_nodes + 64) * sizeof(mxml_node_t *),
|
||||
strerror(errno));
|
||||
|
||||
mxmlIndexDelete(ind);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
ind->nodes = temp;
|
||||
ind->alloc_nodes += 64;
|
||||
}
|
||||
|
||||
ind->nodes[ind->num_nodes ++] = current;
|
||||
|
||||
current = mxmlFindElement(current, node, element, attr, NULL, MXML_DESCEND);
|
||||
}
|
||||
|
||||
/*
|
||||
* Sort nodes based upon the search criteria...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
printf("%d node(s) in index.\n\n", ind->num_nodes);
|
||||
|
||||
if (attr)
|
||||
{
|
||||
printf("Node Address Element %s\n", attr);
|
||||
puts("-------- -------- -------------- ------------------------------");
|
||||
|
||||
for (i = 0; i < ind->num_nodes; i ++)
|
||||
printf("%8d %-8p %-14.14s %s\n", i, ind->nodes[i],
|
||||
ind->nodes[i]->value.element.name,
|
||||
mxmlElementGetAttr(ind->nodes[i], attr));
|
||||
}
|
||||
else
|
||||
{
|
||||
puts("Node Address Element");
|
||||
puts("-------- -------- --------------");
|
||||
|
||||
for (i = 0; i < ind->num_nodes; i ++)
|
||||
printf("%8d %-8p %s\n", i, ind->nodes[i],
|
||||
ind->nodes[i]->value.element.name);
|
||||
}
|
||||
|
||||
putchar('\n');
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (ind->num_nodes > 1)
|
||||
index_sort(ind, 0, ind->num_nodes - 1);
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
puts("After sorting:\n");
|
||||
|
||||
if (attr)
|
||||
{
|
||||
printf("Node Address Element %s\n", attr);
|
||||
puts("-------- -------- -------------- ------------------------------");
|
||||
|
||||
for (i = 0; i < ind->num_nodes; i ++)
|
||||
printf("%8d %-8p %-14.14s %s\n", i, ind->nodes[i],
|
||||
ind->nodes[i]->value.element.name,
|
||||
mxmlElementGetAttr(ind->nodes[i], attr));
|
||||
}
|
||||
else
|
||||
{
|
||||
puts("Node Address Element");
|
||||
puts("-------- -------- --------------");
|
||||
|
||||
for (i = 0; i < ind->num_nodes; i ++)
|
||||
printf("%8d %-8p %s\n", i, ind->nodes[i],
|
||||
ind->nodes[i]->value.element.name);
|
||||
}
|
||||
|
||||
putchar('\n');
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Return the new index...
|
||||
*/
|
||||
|
||||
return (ind);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlIndexReset()' - Reset the enumeration/find pointer in the index and
|
||||
* return the first node in the index.
|
||||
*
|
||||
* This function should be called prior to using mxmlIndexEnum() or
|
||||
* mxmlIndexFind() for the first time.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - First node or NULL if there is none */
|
||||
mxmlIndexReset(mxml_index_t *ind) /* I - Index to reset */
|
||||
{
|
||||
#ifdef DEBUG
|
||||
printf("mxmlIndexReset(ind=%p)\n", ind);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!ind)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Set the index to the first element...
|
||||
*/
|
||||
|
||||
ind->cur_node = 0;
|
||||
|
||||
/*
|
||||
* Return the first node...
|
||||
*/
|
||||
|
||||
if (ind->num_nodes)
|
||||
return (ind->nodes[0]);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'index_compare()' - Compare two nodes.
|
||||
*/
|
||||
|
||||
static int /* O - Result of comparison */
|
||||
index_compare(mxml_index_t *ind, /* I - Index */
|
||||
mxml_node_t *first, /* I - First node */
|
||||
mxml_node_t *second) /* I - Second node */
|
||||
{
|
||||
int diff; /* Difference */
|
||||
|
||||
|
||||
/*
|
||||
* Check the element name...
|
||||
*/
|
||||
|
||||
if ((diff = strcmp(first->value.element.name,
|
||||
second->value.element.name)) != 0)
|
||||
return (diff);
|
||||
|
||||
/*
|
||||
* Check the attribute value...
|
||||
*/
|
||||
|
||||
if (ind->attr)
|
||||
{
|
||||
if ((diff = strcmp(mxmlElementGetAttr(first, ind->attr),
|
||||
mxmlElementGetAttr(second, ind->attr))) != 0)
|
||||
return (diff);
|
||||
}
|
||||
|
||||
/*
|
||||
* No difference, return 0...
|
||||
*/
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'index_find()' - Compare a node with index values.
|
||||
*/
|
||||
|
||||
static int /* O - Result of comparison */
|
||||
index_find(mxml_index_t *ind, /* I - Index */
|
||||
const char *element, /* I - Element name or NULL */
|
||||
const char *value, /* I - Attribute value or NULL */
|
||||
mxml_node_t *node) /* I - Node */
|
||||
{
|
||||
int diff; /* Difference */
|
||||
|
||||
|
||||
/*
|
||||
* Check the element name...
|
||||
*/
|
||||
|
||||
if (element)
|
||||
{
|
||||
if ((diff = strcmp(element, node->value.element.name)) != 0)
|
||||
return (diff);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the attribute value...
|
||||
*/
|
||||
|
||||
if (value)
|
||||
{
|
||||
if ((diff = strcmp(value, mxmlElementGetAttr(node, ind->attr))) != 0)
|
||||
return (diff);
|
||||
}
|
||||
|
||||
/*
|
||||
* No difference, return 0...
|
||||
*/
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'index_sort()' - Sort the nodes in the index...
|
||||
*
|
||||
* This function implements the classic quicksort algorithm...
|
||||
*/
|
||||
|
||||
static void
|
||||
index_sort(mxml_index_t *ind, /* I - Index to sort */
|
||||
int left, /* I - Left node in partition */
|
||||
int right) /* I - Right node in partition */
|
||||
{
|
||||
mxml_node_t *pivot, /* Pivot node */
|
||||
*temp; /* Swap node */
|
||||
int templ, /* Temporary left node */
|
||||
tempr; /* Temporary right node */
|
||||
|
||||
|
||||
/*
|
||||
* Loop until we have sorted all the way to the right...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
/*
|
||||
* Sort the pivot in the current partition...
|
||||
*/
|
||||
|
||||
pivot = ind->nodes[left];
|
||||
|
||||
for (templ = left, tempr = right; templ < tempr;)
|
||||
{
|
||||
/*
|
||||
* Move left while left node <= pivot node...
|
||||
*/
|
||||
|
||||
while ((templ < right) &&
|
||||
index_compare(ind, ind->nodes[templ], pivot) <= 0)
|
||||
templ ++;
|
||||
|
||||
/*
|
||||
* Move right while right node > pivot node...
|
||||
*/
|
||||
|
||||
while ((tempr > left) &&
|
||||
index_compare(ind, ind->nodes[tempr], pivot) > 0)
|
||||
tempr --;
|
||||
|
||||
/*
|
||||
* Swap nodes if needed...
|
||||
*/
|
||||
|
||||
if (templ < tempr)
|
||||
{
|
||||
temp = ind->nodes[templ];
|
||||
ind->nodes[templ] = ind->nodes[tempr];
|
||||
ind->nodes[tempr] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* When we get here, the right (tempr) node is the new position for the
|
||||
* pivot node...
|
||||
*/
|
||||
|
||||
if (index_compare(ind, pivot, ind->nodes[tempr]) > 0)
|
||||
{
|
||||
ind->nodes[left] = ind->nodes[tempr];
|
||||
ind->nodes[tempr] = pivot;
|
||||
}
|
||||
|
||||
/*
|
||||
* Recursively sort the left partition as needed...
|
||||
*/
|
||||
|
||||
if (left < (tempr - 1))
|
||||
index_sort(ind, left, tempr - 1);
|
||||
}
|
||||
while (right > (left = tempr + 1));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-index.c 426 2011-01-01 23:42:17Z mike $".
|
||||
*/
|
||||
807
ogl_editor/external/mxml/mxml-node.c
vendored
Normal file
807
ogl_editor/external/mxml/mxml-node.c
vendored
Normal file
@ -0,0 +1,807 @@
|
||||
/*
|
||||
* "$Id: mxml-node.c 436 2011-01-22 01:02:05Z mike $"
|
||||
*
|
||||
* Node support code for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2011 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlAdd() - Add a node to a tree.
|
||||
* mxmlDelete() - Delete a node and all of its children.
|
||||
* mxmlGetRefCount() - Get the current reference (use) count for a node.
|
||||
* mxmlNewCDATA() - Create a new CDATA node.
|
||||
* mxmlNewCustom() - Create a new custom data node.
|
||||
* mxmlNewElement() - Create a new element node.
|
||||
* mxmlNewInteger() - Create a new integer node.
|
||||
* mxmlNewOpaque() - Create a new opaque string.
|
||||
* mxmlNewReal() - Create a new real number node.
|
||||
* mxmlNewText() - Create a new text fragment node.
|
||||
* mxmlNewTextf() - Create a new formatted text fragment node.
|
||||
* mxmlRemove() - Remove a node from its parent.
|
||||
* mxmlNewXML() - Create a new XML document tree.
|
||||
* mxmlRelease() - Release a node.
|
||||
* mxmlRetain() - Retain a node.
|
||||
* mxml_new() - Create a new node.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static mxml_node_t *mxml_new(mxml_node_t *parent, mxml_type_t type);
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlAdd()' - Add a node to a tree.
|
||||
*
|
||||
* Adds the specified node to the parent. If the child argument is not
|
||||
* NULL, puts the new node before or after the specified child depending
|
||||
* on the value of the where argument. If the child argument is NULL,
|
||||
* puts the new node at the beginning of the child list (MXML_ADD_BEFORE)
|
||||
* or at the end of the child list (MXML_ADD_AFTER). The constant
|
||||
* MXML_ADD_TO_PARENT can be used to specify a NULL child pointer.
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlAdd(mxml_node_t *parent, /* I - Parent node */
|
||||
int where, /* I - Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER */
|
||||
mxml_node_t *child, /* I - Child node for where or MXML_ADD_TO_PARENT */
|
||||
mxml_node_t *node) /* I - Node to add */
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlAdd(parent=%p, where=%d, child=%p, node=%p)\n", parent,
|
||||
where, child, node);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!parent || !node)
|
||||
return;
|
||||
|
||||
#if DEBUG > 1
|
||||
fprintf(stderr, " BEFORE: node->parent=%p\n", node->parent);
|
||||
if (parent)
|
||||
{
|
||||
fprintf(stderr, " BEFORE: parent->child=%p\n", parent->child);
|
||||
fprintf(stderr, " BEFORE: parent->last_child=%p\n", parent->last_child);
|
||||
fprintf(stderr, " BEFORE: parent->prev=%p\n", parent->prev);
|
||||
fprintf(stderr, " BEFORE: parent->next=%p\n", parent->next);
|
||||
}
|
||||
#endif /* DEBUG > 1 */
|
||||
|
||||
/*
|
||||
* Remove the node from any existing parent...
|
||||
*/
|
||||
|
||||
if (node->parent)
|
||||
mxmlRemove(node);
|
||||
|
||||
/*
|
||||
* Reset pointers...
|
||||
*/
|
||||
|
||||
node->parent = parent;
|
||||
|
||||
switch (where)
|
||||
{
|
||||
case MXML_ADD_BEFORE :
|
||||
if (!child || child == parent->child || child->parent != parent)
|
||||
{
|
||||
/*
|
||||
* Insert as first node under parent...
|
||||
*/
|
||||
|
||||
node->next = parent->child;
|
||||
|
||||
if (parent->child)
|
||||
parent->child->prev = node;
|
||||
else
|
||||
parent->last_child = node;
|
||||
|
||||
parent->child = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Insert node before this child...
|
||||
*/
|
||||
|
||||
node->next = child;
|
||||
node->prev = child->prev;
|
||||
|
||||
if (child->prev)
|
||||
child->prev->next = node;
|
||||
else
|
||||
parent->child = node;
|
||||
|
||||
child->prev = node;
|
||||
}
|
||||
break;
|
||||
|
||||
case MXML_ADD_AFTER :
|
||||
if (!child || child == parent->last_child || child->parent != parent)
|
||||
{
|
||||
/*
|
||||
* Insert as last node under parent...
|
||||
*/
|
||||
|
||||
node->parent = parent;
|
||||
node->prev = parent->last_child;
|
||||
|
||||
if (parent->last_child)
|
||||
parent->last_child->next = node;
|
||||
else
|
||||
parent->child = node;
|
||||
|
||||
parent->last_child = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Insert node after this child...
|
||||
*/
|
||||
|
||||
node->prev = child;
|
||||
node->next = child->next;
|
||||
|
||||
if (child->next)
|
||||
child->next->prev = node;
|
||||
else
|
||||
parent->last_child = node;
|
||||
|
||||
child->next = node;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#if DEBUG > 1
|
||||
fprintf(stderr, " AFTER: node->parent=%p\n", node->parent);
|
||||
if (parent)
|
||||
{
|
||||
fprintf(stderr, " AFTER: parent->child=%p\n", parent->child);
|
||||
fprintf(stderr, " AFTER: parent->last_child=%p\n", parent->last_child);
|
||||
fprintf(stderr, " AFTER: parent->prev=%p\n", parent->prev);
|
||||
fprintf(stderr, " AFTER: parent->next=%p\n", parent->next);
|
||||
}
|
||||
#endif /* DEBUG > 1 */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlDelete()' - Delete a node and all of its children.
|
||||
*
|
||||
* If the specified node has a parent, this function first removes the
|
||||
* node from its parent using the mxmlRemove() function.
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlDelete(mxml_node_t *node) /* I - Node to delete */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlDelete(node=%p)\n", node);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Remove the node from its parent, if any...
|
||||
*/
|
||||
|
||||
mxmlRemove(node);
|
||||
|
||||
/*
|
||||
* Delete children...
|
||||
*/
|
||||
|
||||
while (node->child)
|
||||
mxmlDelete(node->child);
|
||||
|
||||
/*
|
||||
* Now delete any node data...
|
||||
*/
|
||||
|
||||
switch (node->type)
|
||||
{
|
||||
case MXML_ELEMENT :
|
||||
if (node->value.element.name)
|
||||
free(node->value.element.name);
|
||||
|
||||
if (node->value.element.num_attrs)
|
||||
{
|
||||
for (i = 0; i < node->value.element.num_attrs; i ++)
|
||||
{
|
||||
if (node->value.element.attrs[i].name)
|
||||
free(node->value.element.attrs[i].name);
|
||||
if (node->value.element.attrs[i].value)
|
||||
free(node->value.element.attrs[i].value);
|
||||
}
|
||||
|
||||
free(node->value.element.attrs);
|
||||
}
|
||||
break;
|
||||
case MXML_INTEGER :
|
||||
/* Nothing to do */
|
||||
break;
|
||||
case MXML_OPAQUE :
|
||||
if (node->value.opaque)
|
||||
free(node->value.opaque);
|
||||
break;
|
||||
case MXML_REAL :
|
||||
/* Nothing to do */
|
||||
break;
|
||||
case MXML_TEXT :
|
||||
if (node->value.text.string)
|
||||
free(node->value.text.string);
|
||||
break;
|
||||
case MXML_CUSTOM :
|
||||
if (node->value.custom.data &&
|
||||
node->value.custom.destroy)
|
||||
(*(node->value.custom.destroy))(node->value.custom.data);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Free this node...
|
||||
*/
|
||||
|
||||
free(node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetRefCount()' - Get the current reference (use) count for a node.
|
||||
*
|
||||
* The initial reference count of new nodes is 1. Use the @link mxmlRetain@
|
||||
* and @link mxmlRelease@ functions to increment and decrement a node's
|
||||
* reference count.
|
||||
*
|
||||
* @since Mini-XML 2.7@.
|
||||
*/
|
||||
|
||||
int /* O - Reference count */
|
||||
mxmlGetRefCount(mxml_node_t *node) /* I - Node */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Return the reference count...
|
||||
*/
|
||||
|
||||
return (node->ref_count);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewCDATA()' - Create a new CDATA node.
|
||||
*
|
||||
* The new CDATA node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* CDATA node has no parent. The data string must be nul-terminated and
|
||||
* is copied into the new node. CDATA nodes use the MXML_ELEMENT type.
|
||||
*
|
||||
* @since Mini-XML 2.3@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
const char *data) /* I - Data string */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewCDATA(parent=%p, data=\"%s\")\n",
|
||||
parent, data ? data : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!data)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Create the node and set the name value...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL)
|
||||
node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data);
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewCustom()' - Create a new custom data node.
|
||||
*
|
||||
* The new custom node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* element node has no parent. NULL can be passed when the data in the
|
||||
* node is not dynamically allocated or is separately managed.
|
||||
*
|
||||
* @since Mini-XML 2.1@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewCustom(
|
||||
mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
void *data, /* I - Pointer to data */
|
||||
mxml_custom_destroy_cb_t destroy) /* I - Function to destroy data */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewCustom(parent=%p, data=%p, destroy=%p)\n", parent,
|
||||
data, destroy);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Create the node and set the value...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_CUSTOM)) != NULL)
|
||||
{
|
||||
node->value.custom.data = data;
|
||||
node->value.custom.destroy = destroy;
|
||||
}
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewElement()' - Create a new element node.
|
||||
*
|
||||
* The new element node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* element node has no parent.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewElement(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
const char *name) /* I - Name of element */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewElement(parent=%p, name=\"%s\")\n", parent,
|
||||
name ? name : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!name)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Create the node and set the element name...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL)
|
||||
node->value.element.name = strdup(name);
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewInteger()' - Create a new integer node.
|
||||
*
|
||||
* The new integer node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* integer node has no parent.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewInteger(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
int integer) /* I - Integer value */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewInteger(parent=%p, integer=%d)\n", parent, integer);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Create the node and set the element name...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_INTEGER)) != NULL)
|
||||
node->value.integer = integer;
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewOpaque()' - Create a new opaque string.
|
||||
*
|
||||
* The new opaque node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* opaque node has no parent. The opaque string must be nul-terminated and
|
||||
* is copied into the new node.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewOpaque(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
const char *opaque) /* I - Opaque string */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewOpaque(parent=%p, opaque=\"%s\")\n", parent,
|
||||
opaque ? opaque : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!opaque)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Create the node and set the element name...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_OPAQUE)) != NULL)
|
||||
node->value.opaque = strdup(opaque);
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewReal()' - Create a new real number node.
|
||||
*
|
||||
* The new real number node is added to the end of the specified parent's
|
||||
* child list. The constant MXML_NO_PARENT can be used to specify that
|
||||
* the new real number node has no parent.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewReal(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
double real) /* I - Real number value */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewReal(parent=%p, real=%g)\n", parent, real);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Create the node and set the element name...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_REAL)) != NULL)
|
||||
node->value.real = real;
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewText()' - Create a new text fragment node.
|
||||
*
|
||||
* The new text node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* text node has no parent. The whitespace parameter is used to specify
|
||||
* whether leading whitespace is present before the node. The text
|
||||
* string must be nul-terminated and is copied into the new node.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewText(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
|
||||
const char *string) /* I - String */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewText(parent=%p, whitespace=%d, string=\"%s\")\n",
|
||||
parent, whitespace, string ? string : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!string)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Create the node and set the text value...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_TEXT)) != NULL)
|
||||
{
|
||||
node->value.text.whitespace = whitespace;
|
||||
node->value.text.string = strdup(string);
|
||||
}
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewTextf()' - Create a new formatted text fragment node.
|
||||
*
|
||||
* The new text node is added to the end of the specified parent's child
|
||||
* list. The constant MXML_NO_PARENT can be used to specify that the new
|
||||
* text node has no parent. The whitespace parameter is used to specify
|
||||
* whether leading whitespace is present before the node. The format
|
||||
* string must be nul-terminated and is formatted into the new node.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New node */
|
||||
mxmlNewTextf(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
|
||||
int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
|
||||
const char *format, /* I - Printf-style frmat string */
|
||||
...) /* I - Additional args as needed */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
va_list ap; /* Pointer to arguments */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlNewTextf(parent=%p, whitespace=%d, format=\"%s\", ...)\n",
|
||||
parent, whitespace, format ? format : "(null)");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!format)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Create the node and set the text value...
|
||||
*/
|
||||
|
||||
if ((node = mxml_new(parent, MXML_TEXT)) != NULL)
|
||||
{
|
||||
va_start(ap, format);
|
||||
|
||||
node->value.text.whitespace = whitespace;
|
||||
node->value.text.string = _mxml_vstrdupf(format, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlRemove()' - Remove a node from its parent.
|
||||
*
|
||||
* Does not free memory used by the node - use mxmlDelete() for that.
|
||||
* This function does nothing if the node has no parent.
|
||||
*/
|
||||
|
||||
void
|
||||
mxmlRemove(mxml_node_t *node) /* I - Node to remove */
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "mxmlRemove(node=%p)\n", node);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || !node->parent)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Remove from parent...
|
||||
*/
|
||||
|
||||
#if DEBUG > 1
|
||||
fprintf(stderr, " BEFORE: node->parent=%p\n", node->parent);
|
||||
if (node->parent)
|
||||
{
|
||||
fprintf(stderr, " BEFORE: node->parent->child=%p\n", node->parent->child);
|
||||
fprintf(stderr, " BEFORE: node->parent->last_child=%p\n", node->parent->last_child);
|
||||
}
|
||||
fprintf(stderr, " BEFORE: node->child=%p\n", node->child);
|
||||
fprintf(stderr, " BEFORE: node->last_child=%p\n", node->last_child);
|
||||
fprintf(stderr, " BEFORE: node->prev=%p\n", node->prev);
|
||||
fprintf(stderr, " BEFORE: node->next=%p\n", node->next);
|
||||
#endif /* DEBUG > 1 */
|
||||
|
||||
if (node->prev)
|
||||
node->prev->next = node->next;
|
||||
else
|
||||
node->parent->child = node->next;
|
||||
|
||||
if (node->next)
|
||||
node->next->prev = node->prev;
|
||||
else
|
||||
node->parent->last_child = node->prev;
|
||||
|
||||
node->parent = NULL;
|
||||
node->prev = NULL;
|
||||
node->next = NULL;
|
||||
|
||||
#if DEBUG > 1
|
||||
fprintf(stderr, " AFTER: node->parent=%p\n", node->parent);
|
||||
if (node->parent)
|
||||
{
|
||||
fprintf(stderr, " AFTER: node->parent->child=%p\n", node->parent->child);
|
||||
fprintf(stderr, " AFTER: node->parent->last_child=%p\n", node->parent->last_child);
|
||||
}
|
||||
fprintf(stderr, " AFTER: node->child=%p\n", node->child);
|
||||
fprintf(stderr, " AFTER: node->last_child=%p\n", node->last_child);
|
||||
fprintf(stderr, " AFTER: node->prev=%p\n", node->prev);
|
||||
fprintf(stderr, " AFTER: node->next=%p\n", node->next);
|
||||
#endif /* DEBUG > 1 */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewXML()' - Create a new XML document tree.
|
||||
*
|
||||
* The "version" argument specifies the version number to put in the
|
||||
* ?xml element node. If NULL, version 1.0 is assumed.
|
||||
*
|
||||
* @since Mini-XML 2.3@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - New ?xml node */
|
||||
mxmlNewXML(const char *version) /* I - Version number to use */
|
||||
{
|
||||
char element[1024]; /* Element text */
|
||||
|
||||
|
||||
snprintf(element, sizeof(element), "?xml version=\"%s\" encoding=\"utf-8\"?",
|
||||
version ? version : "1.0");
|
||||
|
||||
return (mxmlNewElement(NULL, element));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlRelease()' - Release a node.
|
||||
*
|
||||
* When the reference count reaches zero, the node (and any children)
|
||||
* is deleted via mxmlDelete().
|
||||
*
|
||||
* @since Mini-XML 2.3@
|
||||
*/
|
||||
|
||||
int /* O - New reference count */
|
||||
mxmlRelease(mxml_node_t *node) /* I - Node */
|
||||
{
|
||||
if (node)
|
||||
{
|
||||
if ((-- node->ref_count) <= 0)
|
||||
{
|
||||
mxmlDelete(node);
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
return (node->ref_count);
|
||||
}
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlRetain()' - Retain a node.
|
||||
*
|
||||
* @since Mini-XML 2.3@
|
||||
*/
|
||||
|
||||
int /* O - New reference count */
|
||||
mxmlRetain(mxml_node_t *node) /* I - Node */
|
||||
{
|
||||
if (node)
|
||||
return (++ node->ref_count);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_new()' - Create a new node.
|
||||
*/
|
||||
|
||||
static mxml_node_t * /* O - New node */
|
||||
mxml_new(mxml_node_t *parent, /* I - Parent node */
|
||||
mxml_type_t type) /* I - Node type */
|
||||
{
|
||||
mxml_node_t *node; /* New node */
|
||||
|
||||
|
||||
#if DEBUG > 1
|
||||
fprintf(stderr, "mxml_new(parent=%p, type=%d)\n", parent, type);
|
||||
#endif /* DEBUG > 1 */
|
||||
|
||||
/*
|
||||
* Allocate memory for the node...
|
||||
*/
|
||||
|
||||
if ((node = calloc(1, sizeof(mxml_node_t))) == NULL)
|
||||
{
|
||||
#if DEBUG > 1
|
||||
fputs(" returning NULL\n", stderr);
|
||||
#endif /* DEBUG > 1 */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
#if DEBUG > 1
|
||||
fprintf(stderr, " returning %p\n", node);
|
||||
#endif /* DEBUG > 1 */
|
||||
|
||||
/*
|
||||
* Set the node type...
|
||||
*/
|
||||
|
||||
node->type = type;
|
||||
node->ref_count = 1;
|
||||
|
||||
/*
|
||||
* Add to the parent if present...
|
||||
*/
|
||||
|
||||
if (parent)
|
||||
mxmlAdd(parent, MXML_ADD_AFTER, MXML_ADD_TO_PARENT, node);
|
||||
|
||||
/*
|
||||
* Return the new node...
|
||||
*/
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-node.c 436 2011-01-22 01:02:05Z mike $".
|
||||
*/
|
||||
331
ogl_editor/external/mxml/mxml-private.c
vendored
Normal file
331
ogl_editor/external/mxml/mxml-private.c
vendored
Normal file
@ -0,0 +1,331 @@
|
||||
/*
|
||||
* "$Id: mxml-private.c 422 2010-11-07 22:55:11Z mike $"
|
||||
*
|
||||
* Private functions for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxml_error() - Display an error message.
|
||||
* mxml_integer_cb() - Default callback for integer values.
|
||||
* mxml_opaque_cb() - Default callback for opaque values.
|
||||
* mxml_real_cb() - Default callback for real number values.
|
||||
* _mxml_global() - Get global data.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "mxml-private.h"
|
||||
|
||||
|
||||
/*
|
||||
* Some crazy people think that unloading a shared object is a good or safe
|
||||
* thing to do. Unfortunately, most objects are simply *not* safe to unload
|
||||
* and bad things *will* happen.
|
||||
*
|
||||
* The following mess of conditional code allows us to provide a destructor
|
||||
* function in Mini-XML for our thread-global storage so that it can possibly
|
||||
* be unloaded safely, although since there is no standard way to do so I
|
||||
* can't even provide any guarantees that you can do it safely on all platforms.
|
||||
*
|
||||
* This code currently supports AIX, HP-UX, Linux, Mac OS X, Solaris, and
|
||||
* Windows. It might work on the BSDs and IRIX, but I haven't tested that.
|
||||
*/
|
||||
|
||||
#if defined(__sun) || defined(_AIX)
|
||||
# pragma fini(_mxml_fini)
|
||||
# define _MXML_FINI _mxml_fini
|
||||
#elif defined(__hpux)
|
||||
# pragma FINI _mxml_fini
|
||||
# define _MXML_FINI _mxml_fini
|
||||
#elif defined(__GNUC__) /* Linux and Mac OS X */
|
||||
# define _MXML_FINI __attribute((destructor)) _mxml_fini
|
||||
#else
|
||||
# define _MXML_FINI _fini
|
||||
#endif /* __sun */
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_error()' - Display an error message.
|
||||
*/
|
||||
|
||||
void
|
||||
mxml_error(const char *format, /* I - Printf-style format string */
|
||||
...) /* I - Additional arguments as needed */
|
||||
{
|
||||
va_list ap; /* Pointer to arguments */
|
||||
char s[1024]; /* Message string */
|
||||
_mxml_global_t *global = _mxml_global();
|
||||
/* Global data */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!format)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Format the error message string...
|
||||
*/
|
||||
|
||||
va_start(ap, format);
|
||||
|
||||
vsnprintf(s, sizeof(s), format, ap);
|
||||
|
||||
va_end(ap);
|
||||
|
||||
/*
|
||||
* And then display the error message...
|
||||
*/
|
||||
|
||||
if (global->error_cb)
|
||||
(*global->error_cb)(s);
|
||||
else
|
||||
fprintf(stderr, "mxml: %s\n", s);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_ignore_cb()' - Default callback for ignored values.
|
||||
*/
|
||||
|
||||
mxml_type_t /* O - Node type */
|
||||
mxml_ignore_cb(mxml_node_t *node) /* I - Current node */
|
||||
{
|
||||
(void)node;
|
||||
|
||||
return (MXML_IGNORE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_integer_cb()' - Default callback for integer values.
|
||||
*/
|
||||
|
||||
mxml_type_t /* O - Node type */
|
||||
mxml_integer_cb(mxml_node_t *node) /* I - Current node */
|
||||
{
|
||||
(void)node;
|
||||
|
||||
return (MXML_INTEGER);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_opaque_cb()' - Default callback for opaque values.
|
||||
*/
|
||||
|
||||
mxml_type_t /* O - Node type */
|
||||
mxml_opaque_cb(mxml_node_t *node) /* I - Current node */
|
||||
{
|
||||
(void)node;
|
||||
|
||||
return (MXML_OPAQUE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxml_real_cb()' - Default callback for real number values.
|
||||
*/
|
||||
|
||||
mxml_type_t /* O - Node type */
|
||||
mxml_real_cb(mxml_node_t *node) /* I - Current node */
|
||||
{
|
||||
(void)node;
|
||||
|
||||
return (MXML_REAL);
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_PTHREAD_H /**** POSIX threading ****/
|
||||
# include <pthread.h>
|
||||
|
||||
static pthread_key_t _mxml_key = -1; /* Thread local storage key */
|
||||
static pthread_once_t _mxml_key_once = PTHREAD_ONCE_INIT;
|
||||
/* One-time initialization object */
|
||||
static void _mxml_init(void);
|
||||
static void _mxml_destructor(void *g);
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_destructor()' - Free memory used for globals...
|
||||
*/
|
||||
|
||||
static void
|
||||
_mxml_destructor(void *g) /* I - Global data */
|
||||
{
|
||||
free(g);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_fini()' - Clean up when unloaded.
|
||||
*/
|
||||
|
||||
static void
|
||||
_MXML_FINI(void)
|
||||
{
|
||||
_mxml_global_t *global; /* Global data */
|
||||
|
||||
|
||||
if (_mxml_key != -1)
|
||||
{
|
||||
if ((global = (_mxml_global_t *)pthread_getspecific(_mxml_key)) != NULL)
|
||||
_mxml_destructor(global);
|
||||
|
||||
pthread_key_delete(_mxml_key);
|
||||
_mxml_key = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_global()' - Get global data.
|
||||
*/
|
||||
|
||||
_mxml_global_t * /* O - Global data */
|
||||
_mxml_global(void)
|
||||
{
|
||||
_mxml_global_t *global; /* Global data */
|
||||
|
||||
|
||||
pthread_once(&_mxml_key_once, _mxml_init);
|
||||
|
||||
if ((global = (_mxml_global_t *)pthread_getspecific(_mxml_key)) == NULL)
|
||||
{
|
||||
global = (_mxml_global_t *)calloc(1, sizeof(_mxml_global_t));
|
||||
pthread_setspecific(_mxml_key, global);
|
||||
|
||||
global->num_entity_cbs = 1;
|
||||
global->entity_cbs[0] = _mxml_entity_cb;
|
||||
global->wrap = 72;
|
||||
}
|
||||
|
||||
return (global);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_init()' - Initialize global data...
|
||||
*/
|
||||
|
||||
static void
|
||||
_mxml_init(void)
|
||||
{
|
||||
pthread_key_create(&_mxml_key, _mxml_destructor);
|
||||
}
|
||||
|
||||
|
||||
#elif defined(WIN32) && defined(MXML1_EXPORTS) /**** WIN32 threading ****/
|
||||
# include <windows.h>
|
||||
|
||||
static DWORD _mxml_tls_index; /* Index for global storage */
|
||||
|
||||
|
||||
/*
|
||||
* 'DllMain()' - Main entry for library.
|
||||
*/
|
||||
|
||||
BOOL WINAPI /* O - Success/failure */
|
||||
DllMain(HINSTANCE hinst, /* I - DLL module handle */
|
||||
DWORD reason, /* I - Reason */
|
||||
LPVOID reserved) /* I - Unused */
|
||||
{
|
||||
_mxml_global_t *global; /* Global data */
|
||||
|
||||
|
||||
(void)hinst;
|
||||
(void)reserved;
|
||||
|
||||
switch (reason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH : /* Called on library initialization */
|
||||
if ((_mxml_tls_index = TlsAlloc()) == TLS_OUT_OF_INDEXES)
|
||||
return (FALSE);
|
||||
break;
|
||||
|
||||
case DLL_THREAD_DETACH : /* Called when a thread terminates */
|
||||
if ((global = (_mxml_global_t *)TlsGetValue(_mxml_tls_index)) != NULL)
|
||||
free(global);
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH : /* Called when library is unloaded */
|
||||
if ((global = (_mxml_global_t *)TlsGetValue(_mxml_tls_index)) != NULL)
|
||||
free(global);
|
||||
|
||||
TlsFree(_mxml_tls_index);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_global()' - Get global data.
|
||||
*/
|
||||
|
||||
_mxml_global_t * /* O - Global data */
|
||||
_mxml_global(void)
|
||||
{
|
||||
_mxml_global_t *global; /* Global data */
|
||||
|
||||
|
||||
if ((global = (_mxml_global_t *)TlsGetValue(_mxml_tls_index)) == NULL)
|
||||
{
|
||||
global = (_mxml_global_t *)calloc(1, sizeof(_mxml_global_t));
|
||||
|
||||
global->num_entity_cbs = 1;
|
||||
global->entity_cbs[0] = _mxml_entity_cb;
|
||||
global->wrap = 72;
|
||||
|
||||
TlsSetValue(_mxml_tls_index, (LPVOID)global);
|
||||
}
|
||||
|
||||
return (global);
|
||||
}
|
||||
|
||||
|
||||
#else /**** No threading ****/
|
||||
/*
|
||||
* '_mxml_global()' - Get global data.
|
||||
*/
|
||||
|
||||
_mxml_global_t * /* O - Global data */
|
||||
_mxml_global(void)
|
||||
{
|
||||
static _mxml_global_t global = /* Global data */
|
||||
{
|
||||
NULL, /* error_cb */
|
||||
1, /* num_entity_cbs */
|
||||
{ _mxml_entity_cb }, /* entity_cbs */
|
||||
72, /* wrap */
|
||||
NULL, /* custom_load_cb */
|
||||
NULL /* custom_save_cb */
|
||||
};
|
||||
|
||||
|
||||
return (&global);
|
||||
}
|
||||
#endif /* HAVE_PTHREAD_H */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-private.c 422 2010-11-07 22:55:11Z mike $".
|
||||
*/
|
||||
50
ogl_editor/external/mxml/mxml-private.h
vendored
Normal file
50
ogl_editor/external/mxml/mxml-private.h
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* "$Id: mxml-private.h 408 2010-09-19 05:26:46Z mike $"
|
||||
*
|
||||
* Private definitions for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* Global, per-thread data...
|
||||
*/
|
||||
|
||||
typedef struct _mxml_global_s
|
||||
{
|
||||
void (*error_cb)(const char *);
|
||||
int num_entity_cbs;
|
||||
int (*entity_cbs[100])(const char *name);
|
||||
int wrap;
|
||||
mxml_custom_load_cb_t custom_load_cb;
|
||||
mxml_custom_save_cb_t custom_save_cb;
|
||||
} _mxml_global_t;
|
||||
|
||||
|
||||
/*
|
||||
* Functions...
|
||||
*/
|
||||
|
||||
extern _mxml_global_t *_mxml_global(void);
|
||||
extern int _mxml_entity_cb(const char *name);
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-private.h 408 2010-09-19 05:26:46Z mike $".
|
||||
*/
|
||||
287
ogl_editor/external/mxml/mxml-search.c
vendored
Normal file
287
ogl_editor/external/mxml/mxml-search.c
vendored
Normal file
@ -0,0 +1,287 @@
|
||||
/*
|
||||
* "$Id: mxml-search.c 427 2011-01-03 02:03:29Z mike $"
|
||||
*
|
||||
* Search/navigation functions for Mini-XML, a small XML-like file
|
||||
* parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlFindElement() - Find the named element.
|
||||
* mxmlFindValue() - Find a value with the given path.
|
||||
* mxmlWalkNext() - Walk to the next logical node in the tree.
|
||||
* mxmlWalkPrev() - Walk to the previous logical node in the tree.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlFindElement()' - Find the named element.
|
||||
*
|
||||
* The search is constrained by the name, attribute name, and value; any
|
||||
* NULL names or values are treated as wildcards, so different kinds of
|
||||
* searches can be implemented by looking for all elements of a given name
|
||||
* or all elements with a specific attribute. The descend argument determines
|
||||
* whether the search descends into child nodes; normally you will use
|
||||
* MXML_DESCEND_FIRST for the initial search and MXML_NO_DESCEND to find
|
||||
* additional direct descendents of the node. The top node argument
|
||||
* constrains the search to a particular node's children.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Element node or NULL */
|
||||
mxmlFindElement(mxml_node_t *node, /* I - Current node */
|
||||
mxml_node_t *top, /* I - Top node */
|
||||
const char *name, /* I - Element name or NULL for any */
|
||||
const char *attr, /* I - Attribute name, or NULL for none */
|
||||
const char *value, /* I - Attribute value, or NULL for any */
|
||||
int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */
|
||||
{
|
||||
const char *temp; /* Current attribute value */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || !top || (!attr && value))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Start with the next node...
|
||||
*/
|
||||
|
||||
node = mxmlWalkNext(node, top, descend);
|
||||
|
||||
/*
|
||||
* Loop until we find a matching element...
|
||||
*/
|
||||
|
||||
while (node != NULL)
|
||||
{
|
||||
/*
|
||||
* See if this node matches...
|
||||
*/
|
||||
|
||||
if (node->type == MXML_ELEMENT &&
|
||||
node->value.element.name &&
|
||||
(!name || !strcmp(node->value.element.name, name)))
|
||||
{
|
||||
/*
|
||||
* See if we need to check for an attribute...
|
||||
*/
|
||||
|
||||
if (!attr)
|
||||
return (node); /* No attribute search, return it... */
|
||||
|
||||
/*
|
||||
* Check for the attribute...
|
||||
*/
|
||||
|
||||
if ((temp = mxmlElementGetAttr(node, attr)) != NULL)
|
||||
{
|
||||
/*
|
||||
* OK, we have the attribute, does it match?
|
||||
*/
|
||||
|
||||
if (!value || !strcmp(value, temp))
|
||||
return (node); /* Yes, return it... */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* No match, move on to the next node...
|
||||
*/
|
||||
|
||||
if (descend == MXML_DESCEND)
|
||||
node = mxmlWalkNext(node, top, MXML_DESCEND);
|
||||
else
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlFindPath()' - Find a node with the given path.
|
||||
*
|
||||
* The "path" is a slash-separated list of element names. The name "*" is
|
||||
* considered a wildcard for one or more levels of elements. For example,
|
||||
* "foo/one/two", "bar/two/one", "*\/one", and so forth.
|
||||
*
|
||||
* The first child node of the found node is returned if the given node has
|
||||
* children and the first child is a value node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Found node or NULL */
|
||||
mxmlFindPath(mxml_node_t *top, /* I - Top node */
|
||||
const char *path) /* I - Path to element */
|
||||
{
|
||||
mxml_node_t *node; /* Current node */
|
||||
char element[256]; /* Current element name */
|
||||
const char *pathsep; /* Separator in path */
|
||||
int descend; /* mxmlFindElement option */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!top || !path || !*path)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Search each element in the path...
|
||||
*/
|
||||
|
||||
node = top;
|
||||
while (*path)
|
||||
{
|
||||
/*
|
||||
* Handle wildcards...
|
||||
*/
|
||||
|
||||
if (!strncmp(path, "*/", 2))
|
||||
{
|
||||
path += 2;
|
||||
descend = MXML_DESCEND;
|
||||
}
|
||||
else
|
||||
descend = MXML_DESCEND_FIRST;
|
||||
|
||||
/*
|
||||
* Get the next element in the path...
|
||||
*/
|
||||
|
||||
if ((pathsep = strchr(path, '/')) == NULL)
|
||||
pathsep = path + strlen(path);
|
||||
|
||||
if (pathsep == path || (pathsep - path) >= sizeof(element))
|
||||
return (NULL);
|
||||
|
||||
memcpy(element, path, pathsep - path);
|
||||
element[pathsep - path] = '\0';
|
||||
|
||||
if (*pathsep)
|
||||
path = pathsep + 1;
|
||||
else
|
||||
path = pathsep;
|
||||
|
||||
/*
|
||||
* Search for the element...
|
||||
*/
|
||||
|
||||
if ((node = mxmlFindElement(node, node, element, NULL, NULL,
|
||||
descend)) == NULL)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we get this far, return the node or its first child...
|
||||
*/
|
||||
|
||||
if (node->child && node->child->type != MXML_ELEMENT)
|
||||
return (node->child);
|
||||
else
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlWalkNext()' - Walk to the next logical node in the tree.
|
||||
*
|
||||
* The descend argument controls whether the first child is considered
|
||||
* to be the next node. The top node argument constrains the walk to
|
||||
* the node's children.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Next node or NULL */
|
||||
mxmlWalkNext(mxml_node_t *node, /* I - Current node */
|
||||
mxml_node_t *top, /* I - Top node */
|
||||
int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */
|
||||
{
|
||||
if (!node)
|
||||
return (NULL);
|
||||
else if (node->child && descend)
|
||||
return (node->child);
|
||||
else if (node == top)
|
||||
return (NULL);
|
||||
else if (node->next)
|
||||
return (node->next);
|
||||
else if (node->parent && node->parent != top)
|
||||
{
|
||||
node = node->parent;
|
||||
|
||||
while (!node->next)
|
||||
if (node->parent == top || !node->parent)
|
||||
return (NULL);
|
||||
else
|
||||
node = node->parent;
|
||||
|
||||
return (node->next);
|
||||
}
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlWalkPrev()' - Walk to the previous logical node in the tree.
|
||||
*
|
||||
* The descend argument controls whether the previous node's last child
|
||||
* is considered to be the previous node. The top node argument constrains
|
||||
* the walk to the node's children.
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Previous node or NULL */
|
||||
mxmlWalkPrev(mxml_node_t *node, /* I - Current node */
|
||||
mxml_node_t *top, /* I - Top node */
|
||||
int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */
|
||||
{
|
||||
if (!node || node == top)
|
||||
return (NULL);
|
||||
else if (node->prev)
|
||||
{
|
||||
if (node->prev->last_child && descend)
|
||||
{
|
||||
/*
|
||||
* Find the last child under the previous node...
|
||||
*/
|
||||
|
||||
node = node->prev->last_child;
|
||||
|
||||
while (node->last_child)
|
||||
node = node->last_child;
|
||||
|
||||
return (node);
|
||||
}
|
||||
else
|
||||
return (node->prev);
|
||||
}
|
||||
else if (node->parent != top)
|
||||
return (node->parent);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-search.c 427 2011-01-03 02:03:29Z mike $".
|
||||
*/
|
||||
349
ogl_editor/external/mxml/mxml-set.c
vendored
Normal file
349
ogl_editor/external/mxml/mxml-set.c
vendored
Normal file
@ -0,0 +1,349 @@
|
||||
/*
|
||||
* "$Id: mxml-set.c 441 2011-12-09 23:49:00Z mike $"
|
||||
*
|
||||
* Node set functions for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2011 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlSetCDATA() - Set the element name of a CDATA node.
|
||||
* mxmlSetCustom() - Set the data and destructor of a custom data node.
|
||||
* mxmlSetElement() - Set the name of an element node.
|
||||
* mxmlSetInteger() - Set the value of an integer node.
|
||||
* mxmlSetOpaque() - Set the value of an opaque node.
|
||||
* mxmlSetReal() - Set the value of a real number node.
|
||||
* mxmlSetText() - Set the value of a text node.
|
||||
* mxmlSetTextf() - Set the value of a text node to a formatted string.
|
||||
* mxmlSetUserData() - Set the user data pointer for a node.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "mxml.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetCDATA()' - Set the element name of a CDATA node.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not a CDATA element node.
|
||||
*
|
||||
* @since Mini-XML 2.3@
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetCDATA(mxml_node_t *node, /* I - Node to set */
|
||||
const char *data) /* I - New data string */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
strncmp(node->value.element.name, "![CDATA[", 8) &&
|
||||
node->child && node->child->type == MXML_ELEMENT &&
|
||||
!strncmp(node->child->value.element.name, "![CDATA[", 8))
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT || !data ||
|
||||
strncmp(node->value.element.name, "![CDATA[", 8))
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Free any old element value and set the new value...
|
||||
*/
|
||||
|
||||
if (node->value.element.name)
|
||||
free(node->value.element.name);
|
||||
|
||||
node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetCustom()' - Set the data and destructor of a custom data node.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not a custom node.
|
||||
*
|
||||
* @since Mini-XML 2.1@
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetCustom(
|
||||
mxml_node_t *node, /* I - Node to set */
|
||||
void *data, /* I - New data pointer */
|
||||
mxml_custom_destroy_cb_t destroy) /* I - New destructor function */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
node->child && node->child->type == MXML_CUSTOM)
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_CUSTOM)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Free any old element value and set the new value...
|
||||
*/
|
||||
|
||||
if (node->value.custom.data && node->value.custom.destroy)
|
||||
(*(node->value.custom.destroy))(node->value.custom.data);
|
||||
|
||||
node->value.custom.data = data;
|
||||
node->value.custom.destroy = destroy;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetElement()' - Set the name of an element node.
|
||||
*
|
||||
* The node is not changed if it is not an element node.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetElement(mxml_node_t *node, /* I - Node to set */
|
||||
const char *name) /* I - New name string */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node || node->type != MXML_ELEMENT || !name)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Free any old element value and set the new value...
|
||||
*/
|
||||
|
||||
if (node->value.element.name)
|
||||
free(node->value.element.name);
|
||||
|
||||
node->value.element.name = strdup(name);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetInteger()' - Set the value of an integer node.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not an integer node.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetInteger(mxml_node_t *node, /* I - Node to set */
|
||||
int integer) /* I - Integer value */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
node->child && node->child->type == MXML_INTEGER)
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_INTEGER)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Set the new value and return...
|
||||
*/
|
||||
|
||||
node->value.integer = integer;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetOpaque()' - Set the value of an opaque node.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not an opaque node.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetOpaque(mxml_node_t *node, /* I - Node to set */
|
||||
const char *opaque) /* I - Opaque string */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
node->child && node->child->type == MXML_OPAQUE)
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_OPAQUE || !opaque)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Free any old opaque value and set the new value...
|
||||
*/
|
||||
|
||||
if (node->value.opaque)
|
||||
free(node->value.opaque);
|
||||
|
||||
node->value.opaque = strdup(opaque);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetReal()' - Set the value of a real number node.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not a real number node.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetReal(mxml_node_t *node, /* I - Node to set */
|
||||
double real) /* I - Real number value */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
node->child && node->child->type == MXML_REAL)
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_REAL)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Set the new value and return...
|
||||
*/
|
||||
|
||||
node->value.real = real;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetText()' - Set the value of a text node.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not a text node.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetText(mxml_node_t *node, /* I - Node to set */
|
||||
int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
|
||||
const char *string) /* I - String */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
node->child && node->child->type == MXML_TEXT)
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_TEXT || !string)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Free any old string value and set the new value...
|
||||
*/
|
||||
|
||||
if (node->value.text.string)
|
||||
free(node->value.text.string);
|
||||
|
||||
node->value.text.whitespace = whitespace;
|
||||
node->value.text.string = strdup(string);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetTextf()' - Set the value of a text node to a formatted string.
|
||||
*
|
||||
* The node is not changed if it (or its first child) is not a text node.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetTextf(mxml_node_t *node, /* I - Node to set */
|
||||
int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
|
||||
const char *format, /* I - Printf-style format string */
|
||||
...) /* I - Additional arguments as needed */
|
||||
{
|
||||
va_list ap; /* Pointer to arguments */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (node && node->type == MXML_ELEMENT &&
|
||||
node->child && node->child->type == MXML_TEXT)
|
||||
node = node->child;
|
||||
|
||||
if (!node || node->type != MXML_TEXT || !format)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Free any old string value and set the new value...
|
||||
*/
|
||||
|
||||
if (node->value.text.string)
|
||||
free(node->value.text.string);
|
||||
|
||||
va_start(ap, format);
|
||||
|
||||
node->value.text.whitespace = whitespace;
|
||||
node->value.text.string = _mxml_strdupf(format, ap);
|
||||
|
||||
va_end(ap);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlSetUserData()' - Set the user data pointer for a node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
mxmlSetUserData(mxml_node_t *node, /* I - Node to set */
|
||||
void *data) /* I - User data pointer */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Set the user data pointer and return...
|
||||
*/
|
||||
|
||||
node->user_data = data;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-set.c 441 2011-12-09 23:49:00Z mike $".
|
||||
*/
|
||||
476
ogl_editor/external/mxml/mxml-string.c
vendored
Normal file
476
ogl_editor/external/mxml/mxml-string.c
vendored
Normal file
@ -0,0 +1,476 @@
|
||||
/*
|
||||
* "$Id: mxml-string.c 424 2010-12-25 16:21:50Z mike $"
|
||||
*
|
||||
* String functions for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* _mxml_snprintf() - Format a string.
|
||||
* _mxml_strdup() - Duplicate a string.
|
||||
* _mxml_strdupf() - Format and duplicate a string.
|
||||
* _mxml_vsnprintf() - Format a string into a fixed size buffer.
|
||||
* _mxml_vstrdupf() - Format and duplicate a string.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
||||
/*
|
||||
* The va_copy macro is part of C99, but many compilers don't implement it.
|
||||
* Provide a "direct assignment" implmentation when va_copy isn't defined...
|
||||
*/
|
||||
|
||||
#ifndef va_copy
|
||||
# ifdef __va_copy
|
||||
# define va_copy(dst,src) __va_copy(dst,src)
|
||||
# else
|
||||
# define va_copy(dst,src) memcpy(&dst, &src, sizeof(va_list))
|
||||
# endif /* __va_copy */
|
||||
#endif /* va_copy */
|
||||
|
||||
|
||||
#ifndef HAVE_SNPRINTF
|
||||
/*
|
||||
* '_mxml_snprintf()' - Format a string.
|
||||
*/
|
||||
|
||||
int /* O - Number of bytes formatted */
|
||||
_mxml_snprintf(char *buffer, /* I - Output buffer */
|
||||
size_t bufsize, /* I - Size of output buffer */
|
||||
const char *format, /* I - Printf-style format string */
|
||||
...) /* I - Additional arguments as needed */
|
||||
{
|
||||
va_list ap; /* Argument list */
|
||||
int bytes; /* Number of bytes formatted */
|
||||
|
||||
|
||||
va_start(ap, format);
|
||||
bytes = vsnprintf(buffer, bufsize, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
#endif /* !HAVE_SNPRINTF */
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_strdup()' - Duplicate a string.
|
||||
*/
|
||||
|
||||
#ifndef HAVE_STRDUP
|
||||
char * /* O - New string pointer */
|
||||
_mxml_strdup(const char *s) /* I - String to duplicate */
|
||||
{
|
||||
char *t; /* New string pointer */
|
||||
|
||||
|
||||
if (s == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((t = malloc(strlen(s) + 1)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
return (strcpy(t, s));
|
||||
}
|
||||
#endif /* !HAVE_STRDUP */
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_strdupf()' - Format and duplicate a string.
|
||||
*/
|
||||
|
||||
char * /* O - New string pointer */
|
||||
_mxml_strdupf(const char *format, /* I - Printf-style format string */
|
||||
...) /* I - Additional arguments as needed */
|
||||
{
|
||||
va_list ap; /* Pointer to additional arguments */
|
||||
char *s; /* Pointer to formatted string */
|
||||
|
||||
|
||||
/*
|
||||
* Get a pointer to the additional arguments, format the string,
|
||||
* and return it...
|
||||
*/
|
||||
|
||||
va_start(ap, format);
|
||||
s = _mxml_vstrdupf(format, ap);
|
||||
va_end(ap);
|
||||
|
||||
return (s);
|
||||
}
|
||||
|
||||
|
||||
#ifndef HAVE_VSNPRINTF
|
||||
/*
|
||||
* '_mxml_vsnprintf()' - Format a string into a fixed size buffer.
|
||||
*/
|
||||
|
||||
int /* O - Number of bytes formatted */
|
||||
_mxml_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
size_t bufsize, /* O - Size of output buffer */
|
||||
const char *format, /* I - Printf-style format string */
|
||||
va_list ap) /* I - Pointer to additional arguments */
|
||||
{
|
||||
char *bufptr, /* Pointer to position in buffer */
|
||||
*bufend, /* Pointer to end of buffer */
|
||||
sign, /* Sign of format width */
|
||||
size, /* Size character (h, l, L) */
|
||||
type; /* Format type character */
|
||||
int width, /* Width of field */
|
||||
prec; /* Number of characters of precision */
|
||||
char tformat[100], /* Temporary format string for sprintf() */
|
||||
*tptr, /* Pointer into temporary format */
|
||||
temp[1024]; /* Buffer for formatted numbers */
|
||||
char *s; /* Pointer to string */
|
||||
int slen; /* Length of string */
|
||||
int bytes; /* Total number of bytes needed */
|
||||
|
||||
|
||||
/*
|
||||
* Loop through the format string, formatting as needed...
|
||||
*/
|
||||
|
||||
bufptr = buffer;
|
||||
bufend = buffer + bufsize - 1;
|
||||
bytes = 0;
|
||||
|
||||
while (*format)
|
||||
{
|
||||
if (*format == '%')
|
||||
{
|
||||
tptr = tformat;
|
||||
*tptr++ = *format++;
|
||||
|
||||
if (*format == '%')
|
||||
{
|
||||
if (bufptr && bufptr < bufend) *bufptr++ = *format;
|
||||
bytes ++;
|
||||
format ++;
|
||||
continue;
|
||||
}
|
||||
else if (strchr(" -+#\'", *format))
|
||||
{
|
||||
*tptr++ = *format;
|
||||
sign = *format++;
|
||||
}
|
||||
else
|
||||
sign = 0;
|
||||
|
||||
if (*format == '*')
|
||||
{
|
||||
/*
|
||||
* Get width from argument...
|
||||
*/
|
||||
|
||||
format ++;
|
||||
width = va_arg(ap, int);
|
||||
|
||||
snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width);
|
||||
tptr += strlen(tptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
width = 0;
|
||||
|
||||
while (isdigit(*format & 255))
|
||||
{
|
||||
if (tptr < (tformat + sizeof(tformat) - 1))
|
||||
*tptr++ = *format;
|
||||
|
||||
width = width * 10 + *format++ - '0';
|
||||
}
|
||||
}
|
||||
|
||||
if (*format == '.')
|
||||
{
|
||||
if (tptr < (tformat + sizeof(tformat) - 1))
|
||||
*tptr++ = *format;
|
||||
|
||||
format ++;
|
||||
|
||||
if (*format == '*')
|
||||
{
|
||||
/*
|
||||
* Get precision from argument...
|
||||
*/
|
||||
|
||||
format ++;
|
||||
prec = va_arg(ap, int);
|
||||
|
||||
snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec);
|
||||
tptr += strlen(tptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
prec = 0;
|
||||
|
||||
while (isdigit(*format & 255))
|
||||
{
|
||||
if (tptr < (tformat + sizeof(tformat) - 1))
|
||||
*tptr++ = *format;
|
||||
|
||||
prec = prec * 10 + *format++ - '0';
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
prec = -1;
|
||||
|
||||
if (*format == 'l' && format[1] == 'l')
|
||||
{
|
||||
size = 'L';
|
||||
|
||||
if (tptr < (tformat + sizeof(tformat) - 2))
|
||||
{
|
||||
*tptr++ = 'l';
|
||||
*tptr++ = 'l';
|
||||
}
|
||||
|
||||
format += 2;
|
||||
}
|
||||
else if (*format == 'h' || *format == 'l' || *format == 'L')
|
||||
{
|
||||
if (tptr < (tformat + sizeof(tformat) - 1))
|
||||
*tptr++ = *format;
|
||||
|
||||
size = *format++;
|
||||
}
|
||||
|
||||
if (!*format)
|
||||
break;
|
||||
|
||||
if (tptr < (tformat + sizeof(tformat) - 1))
|
||||
*tptr++ = *format;
|
||||
|
||||
type = *format++;
|
||||
*tptr = '\0';
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case 'E' : /* Floating point formats */
|
||||
case 'G' :
|
||||
case 'e' :
|
||||
case 'f' :
|
||||
case 'g' :
|
||||
if ((width + 2) > sizeof(temp))
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, double));
|
||||
|
||||
bytes += strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'B' : /* Integer formats */
|
||||
case 'X' :
|
||||
case 'b' :
|
||||
case 'd' :
|
||||
case 'i' :
|
||||
case 'o' :
|
||||
case 'u' :
|
||||
case 'x' :
|
||||
if ((width + 2) > sizeof(temp))
|
||||
break;
|
||||
|
||||
#ifdef HAVE_LONG_LONG
|
||||
if (size == 'L')
|
||||
sprintf(temp, tformat, va_arg(ap, long long));
|
||||
else
|
||||
#endif /* HAVE_LONG_LONG */
|
||||
sprintf(temp, tformat, va_arg(ap, int));
|
||||
|
||||
bytes += strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p' : /* Pointer value */
|
||||
if ((width + 2) > sizeof(temp))
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, void *));
|
||||
|
||||
bytes += strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'c' : /* Character or character array */
|
||||
bytes += width;
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if (width <= 1)
|
||||
*bufptr++ = va_arg(ap, int);
|
||||
else
|
||||
{
|
||||
if ((bufptr + width) > bufend)
|
||||
width = bufend - bufptr;
|
||||
|
||||
memcpy(bufptr, va_arg(ap, char *), (size_t)width);
|
||||
bufptr += width;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 's' : /* String */
|
||||
if ((s = va_arg(ap, char *)) == NULL)
|
||||
s = "(null)";
|
||||
|
||||
slen = strlen(s);
|
||||
if (slen > width && prec != width)
|
||||
width = slen;
|
||||
|
||||
bytes += width;
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + width) > bufend)
|
||||
width = bufend - bufptr;
|
||||
|
||||
if (slen > width)
|
||||
slen = width;
|
||||
|
||||
if (sign == '-')
|
||||
{
|
||||
strncpy(bufptr, s, (size_t)slen);
|
||||
memset(bufptr + slen, ' ', (size_t)(width - slen));
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(bufptr, ' ', (size_t)(width - slen));
|
||||
strncpy(bufptr + width - slen, s, (size_t)slen);
|
||||
}
|
||||
|
||||
bufptr += width;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'n' : /* Output number of chars so far */
|
||||
*(va_arg(ap, int *)) = bytes;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bytes ++;
|
||||
|
||||
if (bufptr && bufptr < bufend)
|
||||
*bufptr++ = *format;
|
||||
|
||||
format ++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Nul-terminate the string and return the number of characters needed.
|
||||
*/
|
||||
|
||||
*bufptr = '\0';
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
#endif /* !HAVE_VSNPRINTF */
|
||||
|
||||
|
||||
/*
|
||||
* '_mxml_vstrdupf()' - Format and duplicate a string.
|
||||
*/
|
||||
|
||||
char * /* O - New string pointer */
|
||||
_mxml_vstrdupf(const char *format, /* I - Printf-style format string */
|
||||
va_list ap) /* I - Pointer to additional arguments */
|
||||
{
|
||||
int bytes; /* Number of bytes required */
|
||||
char *buffer, /* String buffer */
|
||||
temp[256]; /* Small buffer for first vsnprintf */
|
||||
va_list apcopy; /* Copy of argument list */
|
||||
|
||||
|
||||
/*
|
||||
* First format with a tiny buffer; this will tell us how many bytes are
|
||||
* needed...
|
||||
*/
|
||||
|
||||
va_copy(apcopy, ap);
|
||||
bytes = vsnprintf(temp, sizeof(temp), format, apcopy);
|
||||
|
||||
if (bytes < sizeof(temp))
|
||||
{
|
||||
/*
|
||||
* Hey, the formatted string fits in the tiny buffer, so just dup that...
|
||||
*/
|
||||
|
||||
return (strdup(temp));
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate memory for the whole thing and reformat to the new, larger
|
||||
* buffer...
|
||||
*/
|
||||
|
||||
if ((buffer = calloc(1, bytes + 1)) != NULL)
|
||||
vsnprintf(buffer, bytes + 1, format, ap);
|
||||
|
||||
/*
|
||||
* Return the new string...
|
||||
*/
|
||||
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml-string.c 424 2010-12-25 16:21:50Z mike $".
|
||||
*/
|
||||
329
ogl_editor/external/mxml/mxml.h
vendored
Normal file
329
ogl_editor/external/mxml/mxml.h
vendored
Normal file
@ -0,0 +1,329 @@
|
||||
/*
|
||||
* "$Id: mxml.h 427 2011-01-03 02:03:29Z mike $"
|
||||
*
|
||||
* Header file for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2011 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "COPYING"
|
||||
* which should have been included with this file. If this file is
|
||||
* missing or damaged, see the license at:
|
||||
*
|
||||
* http://www.minixml.org/
|
||||
*/
|
||||
|
||||
/*
|
||||
* Prevent multiple inclusion...
|
||||
*/
|
||||
|
||||
#ifndef _mxml_h_
|
||||
# define _mxml_h_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <ctype.h>
|
||||
# include <errno.h>
|
||||
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define MXML_TAB 8 /* Tabs every N columns */
|
||||
|
||||
# define MXML_NO_CALLBACK 0 /* Don't use a type callback */
|
||||
# define MXML_INTEGER_CALLBACK mxml_integer_cb
|
||||
/* Treat all data as integers */
|
||||
# define MXML_OPAQUE_CALLBACK mxml_opaque_cb
|
||||
/* Treat all data as opaque */
|
||||
# define MXML_REAL_CALLBACK mxml_real_cb
|
||||
/* Treat all data as real numbers */
|
||||
# define MXML_TEXT_CALLBACK 0 /* Treat all data as text */
|
||||
# define MXML_IGNORE_CALLBACK mxml_ignore_cb
|
||||
/* Ignore all non-element content */
|
||||
|
||||
# define MXML_NO_PARENT 0 /* No parent for the node */
|
||||
|
||||
# define MXML_DESCEND 1 /* Descend when finding/walking */
|
||||
# define MXML_NO_DESCEND 0 /* Don't descend when finding/walking */
|
||||
# define MXML_DESCEND_FIRST -1 /* Descend for first find */
|
||||
|
||||
# define MXML_WS_BEFORE_OPEN 0 /* Callback for before open tag */
|
||||
# define MXML_WS_AFTER_OPEN 1 /* Callback for after open tag */
|
||||
# define MXML_WS_BEFORE_CLOSE 2 /* Callback for before close tag */
|
||||
# define MXML_WS_AFTER_CLOSE 3 /* Callback for after close tag */
|
||||
|
||||
# define MXML_ADD_BEFORE 0 /* Add node before specified node */
|
||||
# define MXML_ADD_AFTER 1 /* Add node after specified node */
|
||||
# define MXML_ADD_TO_PARENT NULL /* Add node relative to parent */
|
||||
|
||||
|
||||
/*
|
||||
* Data types...
|
||||
*/
|
||||
|
||||
typedef enum mxml_sax_event_e /**** SAX event type. ****/
|
||||
{
|
||||
MXML_SAX_CDATA, /* CDATA node */
|
||||
MXML_SAX_COMMENT, /* Comment node */
|
||||
MXML_SAX_DATA, /* Data node */
|
||||
MXML_SAX_DIRECTIVE, /* Processing directive node */
|
||||
MXML_SAX_ELEMENT_CLOSE, /* Element closed */
|
||||
MXML_SAX_ELEMENT_OPEN /* Element opened */
|
||||
} mxml_sax_event_t;
|
||||
|
||||
typedef enum mxml_type_e /**** The XML node type. ****/
|
||||
{
|
||||
MXML_IGNORE = -1, /* Ignore/throw away node @since Mini-XML 2.3@ */
|
||||
MXML_ELEMENT, /* XML element with attributes */
|
||||
MXML_INTEGER, /* Integer value */
|
||||
MXML_OPAQUE, /* Opaque string */
|
||||
MXML_REAL, /* Real value */
|
||||
MXML_TEXT, /* Text fragment */
|
||||
MXML_CUSTOM /* Custom data @since Mini-XML 2.1@ */
|
||||
} mxml_type_t;
|
||||
|
||||
typedef void (*mxml_custom_destroy_cb_t)(void *);
|
||||
/**** Custom data destructor ****/
|
||||
|
||||
typedef void (*mxml_error_cb_t)(const char *);
|
||||
/**** Error callback function ****/
|
||||
|
||||
typedef struct mxml_attr_s /**** An XML element attribute value. @private@ ****/
|
||||
{
|
||||
char *name; /* Attribute name */
|
||||
char *value; /* Attribute value */
|
||||
} mxml_attr_t;
|
||||
|
||||
typedef struct mxml_element_s /**** An XML element value. @private@ ****/
|
||||
{
|
||||
char *name; /* Name of element */
|
||||
int num_attrs; /* Number of attributes */
|
||||
mxml_attr_t *attrs; /* Attributes */
|
||||
} mxml_element_t;
|
||||
|
||||
typedef struct mxml_text_s /**** An XML text value. @private@ ****/
|
||||
{
|
||||
int whitespace; /* Leading whitespace? */
|
||||
char *string; /* Fragment string */
|
||||
} mxml_text_t;
|
||||
|
||||
typedef struct mxml_custom_s /**** An XML custom value. @private@ ****/
|
||||
{
|
||||
void *data; /* Pointer to (allocated) custom data */
|
||||
mxml_custom_destroy_cb_t destroy; /* Pointer to destructor function */
|
||||
} mxml_custom_t;
|
||||
|
||||
typedef union mxml_value_u /**** An XML node value. @private@ ****/
|
||||
{
|
||||
mxml_element_t element; /* Element */
|
||||
int integer; /* Integer number */
|
||||
char *opaque; /* Opaque string */
|
||||
double real; /* Real number */
|
||||
mxml_text_t text; /* Text fragment */
|
||||
mxml_custom_t custom; /* Custom data @since Mini-XML 2.1@ */
|
||||
} mxml_value_t;
|
||||
|
||||
struct mxml_node_s /**** An XML node. @private@ ****/
|
||||
{
|
||||
mxml_type_t type; /* Node type */
|
||||
struct mxml_node_s *next; /* Next node under same parent */
|
||||
struct mxml_node_s *prev; /* Previous node under same parent */
|
||||
struct mxml_node_s *parent; /* Parent node */
|
||||
struct mxml_node_s *child; /* First child node */
|
||||
struct mxml_node_s *last_child; /* Last child node */
|
||||
mxml_value_t value; /* Node value */
|
||||
int ref_count; /* Use count */
|
||||
void *user_data; /* User data */
|
||||
};
|
||||
|
||||
typedef struct mxml_node_s mxml_node_t; /**** An XML node. ****/
|
||||
|
||||
struct mxml_index_s /**** An XML node index. @private@ ****/
|
||||
{
|
||||
char *attr; /* Attribute used for indexing or NULL */
|
||||
int num_nodes; /* Number of nodes in index */
|
||||
int alloc_nodes; /* Allocated nodes in index */
|
||||
int cur_node; /* Current node */
|
||||
mxml_node_t **nodes; /* Node array */
|
||||
};
|
||||
|
||||
typedef struct mxml_index_s mxml_index_t;
|
||||
/**** An XML node index. ****/
|
||||
|
||||
typedef int (*mxml_custom_load_cb_t)(mxml_node_t *, const char *);
|
||||
/**** Custom data load callback function ****/
|
||||
|
||||
typedef char *(*mxml_custom_save_cb_t)(mxml_node_t *);
|
||||
/**** Custom data save callback function ****/
|
||||
|
||||
typedef int (*mxml_entity_cb_t)(const char *);
|
||||
/**** Entity callback function */
|
||||
|
||||
typedef mxml_type_t (*mxml_load_cb_t)(mxml_node_t *);
|
||||
/**** Load callback function ****/
|
||||
|
||||
typedef const char *(*mxml_save_cb_t)(mxml_node_t *, int);
|
||||
/**** Save callback function ****/
|
||||
|
||||
typedef void (*mxml_sax_cb_t)(mxml_node_t *, mxml_sax_event_t, void *);
|
||||
/**** SAX callback function ****/
|
||||
|
||||
|
||||
/*
|
||||
* C++ support...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
extern void mxmlAdd(mxml_node_t *parent, int where,
|
||||
mxml_node_t *child, mxml_node_t *node);
|
||||
extern void mxmlDelete(mxml_node_t *node);
|
||||
extern void mxmlElementDeleteAttr(mxml_node_t *node,
|
||||
const char *name);
|
||||
extern const char *mxmlElementGetAttr(mxml_node_t *node, const char *name);
|
||||
extern void mxmlElementSetAttr(mxml_node_t *node, const char *name,
|
||||
const char *value);
|
||||
extern void mxmlElementSetAttrf(mxml_node_t *node, const char *name,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern int mxmlEntityAddCallback(mxml_entity_cb_t cb);
|
||||
extern const char *mxmlEntityGetName(int val);
|
||||
extern int mxmlEntityGetValue(const char *name);
|
||||
extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb);
|
||||
extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,
|
||||
const char *name, const char *attr,
|
||||
const char *value, int descend);
|
||||
extern mxml_node_t *mxmlFindPath(mxml_node_t *node, const char *path);
|
||||
extern const char *mxmlGetCDATA(mxml_node_t *node);
|
||||
extern const void *mxmlGetCustom(mxml_node_t *node);
|
||||
extern const char *mxmlGetElement(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetFirstChild(mxml_node_t *node);
|
||||
extern int mxmlGetInteger(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetLastChild(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetNextSibling(mxml_node_t *node);
|
||||
extern const char *mxmlGetOpaque(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetParent(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetPrevSibling(mxml_node_t *node);
|
||||
extern double mxmlGetReal(mxml_node_t *node);
|
||||
extern int mxmlGetRefCount(mxml_node_t *node);
|
||||
extern const char *mxmlGetText(mxml_node_t *node, int *whitespace);
|
||||
extern mxml_type_t mxmlGetType(mxml_node_t *node);
|
||||
extern void *mxmlGetUserData(mxml_node_t *node);
|
||||
extern void mxmlIndexDelete(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlIndexEnum(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlIndexFind(mxml_index_t *ind,
|
||||
const char *element,
|
||||
const char *value);
|
||||
extern int mxmlIndexGetCount(mxml_index_t *ind);
|
||||
extern mxml_index_t *mxmlIndexNew(mxml_node_t *node, const char *element,
|
||||
const char *attr);
|
||||
extern mxml_node_t *mxmlIndexReset(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlLoadFd(mxml_node_t *top, int fd,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlLoadFile(mxml_node_t *top, FILE *fp,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlLoadString(mxml_node_t *top, const char *s,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlNewCDATA(mxml_node_t *parent, const char *string);
|
||||
extern mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data,
|
||||
mxml_custom_destroy_cb_t destroy);
|
||||
extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name);
|
||||
extern mxml_node_t *mxmlNewInteger(mxml_node_t *parent, int integer);
|
||||
extern mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque);
|
||||
extern mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real);
|
||||
extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace,
|
||||
const char *string);
|
||||
extern mxml_node_t *mxmlNewTextf(mxml_node_t *parent, int whitespace,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern mxml_node_t *mxmlNewXML(const char *version);
|
||||
extern int mxmlRelease(mxml_node_t *node);
|
||||
extern void mxmlRemove(mxml_node_t *node);
|
||||
extern int mxmlRetain(mxml_node_t *node);
|
||||
extern char *mxmlSaveAllocString(mxml_node_t *node,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveFd(mxml_node_t *node, int fd,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveFile(mxml_node_t *node, FILE *fp,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveString(mxml_node_t *node, char *buffer,
|
||||
int bufsize, mxml_save_cb_t cb);
|
||||
extern mxml_node_t *mxmlSAXLoadFd(mxml_node_t *top, int fd,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern mxml_node_t *mxmlSAXLoadFile(mxml_node_t *top, FILE *fp,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern mxml_node_t *mxmlSAXLoadString(mxml_node_t *top, const char *s,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern int mxmlSetCDATA(mxml_node_t *node, const char *data);
|
||||
extern int mxmlSetCustom(mxml_node_t *node, void *data,
|
||||
mxml_custom_destroy_cb_t destroy);
|
||||
extern void mxmlSetCustomHandlers(mxml_custom_load_cb_t load,
|
||||
mxml_custom_save_cb_t save);
|
||||
extern int mxmlSetElement(mxml_node_t *node, const char *name);
|
||||
extern void mxmlSetErrorCallback(mxml_error_cb_t cb);
|
||||
extern int mxmlSetInteger(mxml_node_t *node, int integer);
|
||||
extern int mxmlSetOpaque(mxml_node_t *node, const char *opaque);
|
||||
extern int mxmlSetReal(mxml_node_t *node, double real);
|
||||
extern int mxmlSetText(mxml_node_t *node, int whitespace,
|
||||
const char *string);
|
||||
extern int mxmlSetTextf(mxml_node_t *node, int whitespace,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern int mxmlSetUserData(mxml_node_t *node, void *data);
|
||||
extern void mxmlSetWrapMargin(int column);
|
||||
extern mxml_node_t *mxmlWalkNext(mxml_node_t *node, mxml_node_t *top,
|
||||
int descend);
|
||||
extern mxml_node_t *mxmlWalkPrev(mxml_node_t *node, mxml_node_t *top,
|
||||
int descend);
|
||||
|
||||
|
||||
/*
|
||||
* Semi-private functions...
|
||||
*/
|
||||
|
||||
extern void mxml_error(const char *format, ...);
|
||||
extern mxml_type_t mxml_ignore_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_integer_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_opaque_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_real_cb(mxml_node_t *node);
|
||||
|
||||
|
||||
/*
|
||||
* C++ support...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
#endif /* !_mxml_h_ */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml.h 427 2011-01-03 02:03:29Z mike $".
|
||||
*/
|
||||
@ -16,6 +16,7 @@
|
||||
#include "../../sync/base.h"
|
||||
#include "../../sync/data.h"
|
||||
|
||||
#include <GL/glfw.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
|
||||
void Editor_create();
|
||||
void Editor_destroy();
|
||||
void Editor_init();
|
||||
|
||||
@ -117,13 +117,14 @@ void TrackData_linkGroups(TrackData* trackData)
|
||||
for (i = 0, track_count = sync->num_tracks; i < track_count; ++i)
|
||||
{
|
||||
int group_count;
|
||||
Track* track;
|
||||
const char* track_name = sync->tracks[i]->name;
|
||||
Group* group = &trackData->groups[current_group];
|
||||
|
||||
if (processed_tracks[i])
|
||||
continue;
|
||||
|
||||
Track* track = &trackData->tracks[i];
|
||||
track = &trackData->tracks[i];
|
||||
found = findSeparator(track_name);
|
||||
|
||||
if (found == -1)
|
||||
|
||||
@ -11,12 +11,12 @@
|
||||
#include "../../sync/data.h"
|
||||
#include "../../sync/track.h"
|
||||
|
||||
const int font_size = 8;
|
||||
const int font_size_half = font_size / 2;
|
||||
const int track_size_folded = 20;
|
||||
const int min_track_size = 100;
|
||||
const int colorbar_adjust = ((font_size * 3) + 2);
|
||||
static const int name_adjust = font_size * 2;
|
||||
#define font_size 8
|
||||
int track_size_folded = 20;
|
||||
int min_track_size = 100;
|
||||
int name_adjust = font_size * 2;
|
||||
int font_size_half = font_size / 2;
|
||||
int colorbar_adjust = ((font_size * 3) + 2);
|
||||
|
||||
static bool s_needsUpdate = false;
|
||||
|
||||
@ -414,7 +414,7 @@ void renderGroups(TrackViewInfo* viewInfo, TrackData* trackData)
|
||||
const int sel_track = trackData->activeTrack;
|
||||
int start_track = viewInfo->startTrack;
|
||||
int x_pos = 40;
|
||||
//int end_track = 0;
|
||||
int end_track = 0;
|
||||
int i = 0;
|
||||
int track_size;
|
||||
int adjust_top_size;
|
||||
@ -456,7 +456,7 @@ void renderGroups(TrackViewInfo* viewInfo, TrackData* trackData)
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = start_track; i < trackData->syncData.num_tracks; )
|
||||
for (i = start_track, end_track = (int)trackData->syncData.num_tracks; i < end_track; )
|
||||
{
|
||||
Track* track = &trackData->tracks[i];
|
||||
Group* group = track->group;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "LoadSave.h"
|
||||
#include "Dialog.h"
|
||||
#include "TrackData.h"
|
||||
#include "External/mxml/mxml.h"
|
||||
#include "../external/mxml/mxml.h"
|
||||
#include "RemoteConnection.h"
|
||||
#include "../../sync/data.h"
|
||||
#include <Types.h>
|
||||
@ -165,7 +165,7 @@ int LoadSave_loadRocketXMLDialog(TrackData* trackData)
|
||||
{
|
||||
char path[512];
|
||||
|
||||
if (!Dialog_open(path))
|
||||
//if (!Dialog_open(path))
|
||||
return false;
|
||||
|
||||
return LoadSave_loadRocketXML(path, trackData);
|
||||
@ -242,7 +242,7 @@ int LoadSave_saveRocketXMLDialog(TrackData* trackData)
|
||||
{
|
||||
char path[512];
|
||||
|
||||
if (!Dialog_save(path))
|
||||
//if (!Dialog_save(path))
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
43
ogl_editor/src/main.c
Normal file
43
ogl_editor/src/main.c
Normal file
@ -0,0 +1,43 @@
|
||||
#include "Editor.h"
|
||||
#include <GL/glfw.h>
|
||||
#include <Emgui.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int main()
|
||||
{
|
||||
if (!glfwInit())
|
||||
{
|
||||
printf("Failed to initialize GLFW\n" );
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!glfwOpenWindow(800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW))
|
||||
{
|
||||
printf("Failed to open GLFW window\n" );
|
||||
return -1;
|
||||
}
|
||||
|
||||
glfwSetWindowTitle("RocketEditor");
|
||||
|
||||
Editor_create();
|
||||
|
||||
do
|
||||
{
|
||||
int width, height;
|
||||
|
||||
glfwGetWindowSize(&width, &height);
|
||||
EMGFXBackend_updateViewPort(width, height);
|
||||
Editor_setWindowSize(width, height);
|
||||
|
||||
Editor_update();
|
||||
|
||||
glfwSwapBuffers();
|
||||
}
|
||||
while (glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS && glfwGetWindowParam(GLFW_OPENED));
|
||||
|
||||
glfwTerminate();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
59
units.lua
59
units.lua
@ -2,7 +2,7 @@ StaticLibrary {
|
||||
Name = "mxml",
|
||||
|
||||
Env = {
|
||||
CPPPATH = { ".", "ogl_rocket/src/External/mxml" },
|
||||
CPPPATH = { ".", "ogl_rocket/external/mxml" },
|
||||
PROGOPTS = {
|
||||
{ "/SUBSYSTEM:WINDOWS", "/DEBUG"; Config = { "win32-*-*", "win64-*-*" } },
|
||||
},
|
||||
@ -18,13 +18,48 @@ StaticLibrary {
|
||||
|
||||
Sources = {
|
||||
Glob {
|
||||
Dir = "ogl_editor/src/External/mxml",
|
||||
Dir = "ogl_editor/external/mxml",
|
||||
Extensions = { ".c" },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
StaticLibrary {
|
||||
Name = "glfw",
|
||||
|
||||
Env = {
|
||||
CPPPATH = { ".",
|
||||
"ogl_editor/external/glfw/include",
|
||||
"ogl_editor/external/glfw/lib",
|
||||
{ "ogl_editor/external/glfw/lib/win32" ; Config = "win32-*-*" }
|
||||
},
|
||||
PROGOPTS = {
|
||||
{ "/SUBSYSTEM:WINDOWS", "/DEBUG"; Config = { "win32-*-*", "win64-*-*" } },
|
||||
},
|
||||
|
||||
CPPDEFS = {
|
||||
{"_THREAD_SAFE", "_REENTRANT"; Config = "macosx-*-*" }
|
||||
},
|
||||
|
||||
CCOPTS = {
|
||||
{ "-Wall"; Config = "macosx-clang-*" },
|
||||
},
|
||||
},
|
||||
|
||||
Sources = {
|
||||
FGlob {
|
||||
Dir = "ogl_editor/external/glfw/lib",
|
||||
Extensions = { ".c" },
|
||||
Filters = {
|
||||
{ Pattern = "x11"; Config = "linux-*-*" },
|
||||
{ Pattern = "cocoa"; Config = "macosx-*-*" },
|
||||
{ Pattern = "win32"; Config = { "win32-*-*", "win64-*-*" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
StaticLibrary {
|
||||
Name = "emgui",
|
||||
|
||||
Env = {
|
||||
@ -73,11 +108,12 @@ Program {
|
||||
|
||||
Env = {
|
||||
CPPPATH = { ".", "ogl_editor/src",
|
||||
"ogl_editor/external/glfw/include",
|
||||
"../emgui/src",
|
||||
"../../../../../emgui/src",
|
||||
"ogl_editor/External/mxml" },
|
||||
PROGOPTS = {
|
||||
{ "/SUBSYSTEM:WINDOWS", "/DEBUG"; Config = { "win32-*-*", "win64-*-*" } },
|
||||
{ "/SUBSYSTEM:WINDOWS", "/ENTRY:mainCRTStartup", "/DEBUG"; Config = { "win32-*-*", "win64-*-*" } },
|
||||
},
|
||||
|
||||
CPPDEFS = {
|
||||
@ -90,20 +126,23 @@ Program {
|
||||
},
|
||||
},
|
||||
|
||||
Depends = { "sync", "mxml", "emgui" },
|
||||
|
||||
Frameworks = { "Cocoa", "OpenGL" },
|
||||
|
||||
Sources = {
|
||||
FGlob {
|
||||
Dir = "ogl_editor/src",
|
||||
Extensions = { ".c", ".m" },
|
||||
Extensions = { ".c", { ".m"; Config = "macosx-*-*" } },
|
||||
Filters = {
|
||||
{ Pattern = "macosx"; Config = "macosx-*-*" },
|
||||
{ Pattern = "windows"; Config = { "win32-*-*", "win64-*-*" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Depends = { "sync", "mxml", "emgui", "glfw" },
|
||||
|
||||
Libs = { { "wsock32.lib", "opengl32.lib", "glu32.lib", "kernel32.lib", "user32.lib", "gdi32.lib" ; Config = "win32-*-*" } },
|
||||
|
||||
Frameworks = { "Cocoa", "OpenGL" },
|
||||
|
||||
}
|
||||
|
||||
local rocketBundle = OsxBundle
|
||||
@ -121,9 +160,9 @@ local rocketBundle = OsxBundle
|
||||
--local native = require('tundra.native')
|
||||
|
||||
--if native.host_platform == "macosx" then
|
||||
Default(rocketBundle)
|
||||
-- Default(rocketBundle)
|
||||
--#else
|
||||
-- Default "editor"
|
||||
Default "editor"
|
||||
--end
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user