ruby-glfw 0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +1 -0
- data/README.API +73 -0
- data/Rakefile +120 -0
- data/examples/boing.rb +519 -0
- data/examples/gears.rb +327 -0
- data/examples/keytest.rb +117 -0
- data/examples/listmodes.rb +20 -0
- data/examples/mipmaps.rb +104 -0
- data/examples/mipmaps.tga +0 -0
- data/examples/particles.rb +837 -0
- data/examples/pong3d.rb +741 -0
- data/examples/pong3d_field.tga +0 -0
- data/examples/pong3d_instr.tga +0 -0
- data/examples/pong3d_menu.tga +0 -0
- data/examples/pong3d_title.tga +0 -0
- data/examples/pong3d_winner1.tga +0 -0
- data/examples/pong3d_winner2.tga +0 -0
- data/examples/splitview.rb +432 -0
- data/examples/triangle.rb +89 -0
- data/examples/wave.rb +294 -0
- data/ext/glfw/glfw.c +1094 -0
- data/ext/glfw/mkrf_conf.rb +70 -0
- data/glfw-src/Makefile +220 -0
- data/glfw-src/compile.ami +61 -0
- data/glfw-src/compile.bat +217 -0
- data/glfw-src/compile.sh +607 -0
- data/glfw-src/docs/Makefile +57 -0
- data/glfw-src/docs/Reference.pdf +0 -0
- data/glfw-src/docs/UsersGuide.pdf +0 -0
- data/glfw-src/docs/cleanup.bat +22 -0
- data/glfw-src/docs/glfwdoc.sty +80 -0
- data/glfw-src/docs/glfwrm.tex +3034 -0
- data/glfw-src/docs/glfwug.tex +2024 -0
- data/glfw-src/docs/readme.txt +80 -0
- data/glfw-src/examples/Makefile.amigaos.gcc +70 -0
- data/glfw-src/examples/Makefile.amigaos.vbcc +70 -0
- data/glfw-src/examples/Makefile.dos.djgpp +71 -0
- data/glfw-src/examples/Makefile.macosx.gcc +96 -0
- data/glfw-src/examples/Makefile.win32.bcc +75 -0
- data/glfw-src/examples/Makefile.win32.cross-mgw +79 -0
- data/glfw-src/examples/Makefile.win32.cygwin +79 -0
- data/glfw-src/examples/Makefile.win32.lcc +74 -0
- data/glfw-src/examples/Makefile.win32.mgw +75 -0
- data/glfw-src/examples/Makefile.win32.msvc +74 -0
- data/glfw-src/examples/Makefile.win32.ow +74 -0
- data/glfw-src/examples/Makefile.win32.pellesc +74 -0
- data/glfw-src/examples/Makefile.x11.in +54 -0
- data/glfw-src/examples/boing.c +606 -0
- data/glfw-src/examples/bundle.sh +46 -0
- data/glfw-src/examples/gears.c +382 -0
- data/glfw-src/examples/keytest.c +264 -0
- data/glfw-src/examples/listmodes.c +48 -0
- data/glfw-src/examples/mipmaps.c +126 -0
- data/glfw-src/examples/mipmaps.tga +0 -0
- data/glfw-src/examples/mtbench.c +301 -0
- data/glfw-src/examples/mthello.c +48 -0
- data/glfw-src/examples/particles.c +1148 -0
- data/glfw-src/examples/pong3d.c +839 -0
- data/glfw-src/examples/pong3d_field.tga +0 -0
- data/glfw-src/examples/pong3d_instr.tga +0 -0
- data/glfw-src/examples/pong3d_menu.tga +0 -0
- data/glfw-src/examples/pong3d_title.tga +0 -0
- data/glfw-src/examples/pong3d_winner1.tga +0 -0
- data/glfw-src/examples/pong3d_winner2.tga +0 -0
- data/glfw-src/examples/splitview.c +506 -0
- data/glfw-src/examples/triangle.c +108 -0
- data/glfw-src/examples/wave.c +397 -0
- data/glfw-src/images/opengl.gif +0 -0
- data/glfw-src/images/osicert.gif +0 -0
- data/glfw-src/include/GL/glfw.h +486 -0
- data/glfw-src/lib/amigaos/Makefile.amigaos.gcc +128 -0
- data/glfw-src/lib/amigaos/Makefile.amigaos.vbcc +128 -0
- data/glfw-src/lib/amigaos/SDI_compiler.h +94 -0
- data/glfw-src/lib/amigaos/amigaos_enable.c +51 -0
- data/glfw-src/lib/amigaos/amigaos_fullscreen.c +319 -0
- data/glfw-src/lib/amigaos/amigaos_glext.c +61 -0
- data/glfw-src/lib/amigaos/amigaos_init.c +284 -0
- data/glfw-src/lib/amigaos/amigaos_joystick.c +359 -0
- data/glfw-src/lib/amigaos/amigaos_thread.c +494 -0
- data/glfw-src/lib/amigaos/amigaos_time.c +206 -0
- data/glfw-src/lib/amigaos/amigaos_window.c +830 -0
- data/glfw-src/lib/amigaos/platform.h +337 -0
- data/glfw-src/lib/dos/Makefile.dos.djgpp +146 -0
- data/glfw-src/lib/dos/dos_enable.c +51 -0
- data/glfw-src/lib/dos/dos_events.c +173 -0
- data/glfw-src/lib/dos/dos_fullscreen.c +101 -0
- data/glfw-src/lib/dos/dos_glext.c +59 -0
- data/glfw-src/lib/dos/dos_init.c +105 -0
- data/glfw-src/lib/dos/dos_irq.s +246 -0
- data/glfw-src/lib/dos/dos_joystick.c +94 -0
- data/glfw-src/lib/dos/dos_keyboard.c +694 -0
- data/glfw-src/lib/dos/dos_mouse.c +337 -0
- data/glfw-src/lib/dos/dos_thread.c +267 -0
- data/glfw-src/lib/dos/dos_time.c +309 -0
- data/glfw-src/lib/dos/dos_window.c +563 -0
- data/glfw-src/lib/dos/platform.h +341 -0
- data/glfw-src/lib/enable.c +295 -0
- data/glfw-src/lib/fullscreen.c +95 -0
- data/glfw-src/lib/glext.c +201 -0
- data/glfw-src/lib/image.c +629 -0
- data/glfw-src/lib/init.c +108 -0
- data/glfw-src/lib/input.c +280 -0
- data/glfw-src/lib/internal.h +210 -0
- data/glfw-src/lib/joystick.c +101 -0
- data/glfw-src/lib/macosx/Makefile.macosx.gcc +172 -0
- data/glfw-src/lib/macosx/Makefile.macosx.gcc.universal +166 -0
- data/glfw-src/lib/macosx/libglfw.pc.in +11 -0
- data/glfw-src/lib/macosx/macosx_enable.c +42 -0
- data/glfw-src/lib/macosx/macosx_fullscreen.c +126 -0
- data/glfw-src/lib/macosx/macosx_glext.c +52 -0
- data/glfw-src/lib/macosx/macosx_init.c +194 -0
- data/glfw-src/lib/macosx/macosx_joystick.c +50 -0
- data/glfw-src/lib/macosx/macosx_thread.c +414 -0
- data/glfw-src/lib/macosx/macosx_time.c +112 -0
- data/glfw-src/lib/macosx/macosx_window.c +1279 -0
- data/glfw-src/lib/macosx/platform.h +349 -0
- data/glfw-src/lib/stream.c +194 -0
- data/glfw-src/lib/tga.c +405 -0
- data/glfw-src/lib/thread.c +340 -0
- data/glfw-src/lib/time.c +83 -0
- data/glfw-src/lib/win32/Makefile.win32.bcc +265 -0
- data/glfw-src/lib/win32/Makefile.win32.cross-mgw +274 -0
- data/glfw-src/lib/win32/Makefile.win32.cygwin +279 -0
- data/glfw-src/lib/win32/Makefile.win32.lcc +246 -0
- data/glfw-src/lib/win32/Makefile.win32.mgw +243 -0
- data/glfw-src/lib/win32/Makefile.win32.msvc +242 -0
- data/glfw-src/lib/win32/Makefile.win32.ow +242 -0
- data/glfw-src/lib/win32/Makefile.win32.pellesc +242 -0
- data/glfw-src/lib/win32/glfwdll.def +67 -0
- data/glfw-src/lib/win32/glfwdll_mgw1.def +67 -0
- data/glfw-src/lib/win32/glfwdll_mgw2.def +67 -0
- data/glfw-src/lib/win32/glfwdll_pellesc.def +65 -0
- data/glfw-src/lib/win32/libglfw.pc.in +11 -0
- data/glfw-src/lib/win32/platform.h +474 -0
- data/glfw-src/lib/win32/win32_dllmain.c +60 -0
- data/glfw-src/lib/win32/win32_enable.c +155 -0
- data/glfw-src/lib/win32/win32_fullscreen.c +317 -0
- data/glfw-src/lib/win32/win32_glext.c +85 -0
- data/glfw-src/lib/win32/win32_init.c +356 -0
- data/glfw-src/lib/win32/win32_joystick.c +234 -0
- data/glfw-src/lib/win32/win32_thread.c +511 -0
- data/glfw-src/lib/win32/win32_time.c +146 -0
- data/glfw-src/lib/win32/win32_window.c +1714 -0
- data/glfw-src/lib/window.c +727 -0
- data/glfw-src/lib/x11/Makefile.x11.in +243 -0
- data/glfw-src/lib/x11/platform.h +415 -0
- data/glfw-src/lib/x11/x11_enable.c +51 -0
- data/glfw-src/lib/x11/x11_fullscreen.c +524 -0
- data/glfw-src/lib/x11/x11_glext.c +69 -0
- data/glfw-src/lib/x11/x11_init.c +275 -0
- data/glfw-src/lib/x11/x11_joystick.c +371 -0
- data/glfw-src/lib/x11/x11_keysym2unicode.c +902 -0
- data/glfw-src/lib/x11/x11_thread.c +507 -0
- data/glfw-src/lib/x11/x11_time.c +154 -0
- data/glfw-src/lib/x11/x11_window.c +1746 -0
- data/glfw-src/license.txt +21 -0
- data/glfw-src/readme.html +927 -0
- data/glfw-src/support/d/examples/Makefile +59 -0
- data/glfw-src/support/d/examples/boing.d +610 -0
- data/glfw-src/support/d/examples/gears.d +379 -0
- data/glfw-src/support/d/examples/keytest.d +272 -0
- data/glfw-src/support/d/examples/listmodes.d +48 -0
- data/glfw-src/support/d/examples/mipmaps.d +126 -0
- data/glfw-src/support/d/examples/mtbench.d +304 -0
- data/glfw-src/support/d/examples/mthello.d +54 -0
- data/glfw-src/support/d/examples/particles.d +1150 -0
- data/glfw-src/support/d/examples/pong3d.d +840 -0
- data/glfw-src/support/d/examples/splitview.d +486 -0
- data/glfw-src/support/d/examples/triangle.d +108 -0
- data/glfw-src/support/d/examples/wave.d +400 -0
- data/glfw-src/support/d/imports/gl.d +4539 -0
- data/glfw-src/support/d/imports/glfw.d +349 -0
- data/glfw-src/support/d/imports/glu.d +328 -0
- data/glfw-src/support/d/lib/glfwdll.def +64 -0
- data/glfw-src/support/d/lib/glu32.def +56 -0
- data/glfw-src/support/d/lib/makefile +12 -0
- data/glfw-src/support/d/lib/opengl32.def +372 -0
- data/glfw-src/support/d/readme.html +83 -0
- data/glfw-src/support/delphi/examples/Triangle.dpr +105 -0
- data/glfw-src/support/delphi/lib/glfw.pas +437 -0
- data/glfw-src/support/delphi/readme.html +97 -0
- data/glfw-src/support/lua/examples/gears.lua +383 -0
- data/glfw-src/support/lua/examples/test1.lua +68 -0
- data/glfw-src/support/lua/readme.html +128 -0
- data/glfw-src/support/lua/src/luaglfw.c +1179 -0
- data/glfw-src/support/lua/src/luaglfw.h +48 -0
- data/glfw-src/support/lua/src/runlua.c +82 -0
- data/glfw-src/support/masm/examples/fpc.mac +47 -0
- data/glfw-src/support/masm/examples/makeit.bat +66 -0
- data/glfw-src/support/masm/examples/triangle.asm +232 -0
- data/glfw-src/support/masm/include/glfw.inc +326 -0
- data/glfw-src/support/masm/include/glu32.inc +55 -0
- data/glfw-src/support/masm/include/opengl32.inc +372 -0
- data/glfw-src/support/masm/lib/glfwdll.lib +0 -0
- data/glfw-src/support/masm/readme.html +170 -0
- data/glfw-src/support/msvc80/GLFW.sln +26 -0
- data/glfw-src/support/msvc80/GLFW.vcproj +257 -0
- data/glfw-src/support/msvc80/GLFWDLL.vcproj +287 -0
- data/glfw-src/support/visualbasic/bindings/glfw.bas +320 -0
- data/glfw-src/support/visualbasic/bindings/glu32.bas +284 -0
- data/glfw-src/support/visualbasic/bindings/opengl32.bas +999 -0
- data/glfw-src/support/visualbasic/examples/Triangle.bas +101 -0
- data/glfw-src/support/visualbasic/readme.html +164 -0
- data/website/index.html +84 -0
- data/website/style.css +110 -0
- metadata +301 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
//========================================================================
|
|
2
|
+
// GLFW - An OpenGL framework
|
|
3
|
+
// File: dos_mouse.c
|
|
4
|
+
// Platform: DOS
|
|
5
|
+
// API version: 2.6
|
|
6
|
+
// WWW: http://glfw.sourceforge.net
|
|
7
|
+
//------------------------------------------------------------------------
|
|
8
|
+
// Copyright (c) 2002-2006 Camilla Berglund
|
|
9
|
+
//
|
|
10
|
+
// This software is provided 'as-is', without any express or implied
|
|
11
|
+
// warranty. In no event will the authors be held liable for any damages
|
|
12
|
+
// arising from the use of this software.
|
|
13
|
+
//
|
|
14
|
+
// Permission is granted to anyone to use this software for any purpose,
|
|
15
|
+
// including commercial applications, and to alter it and redistribute it
|
|
16
|
+
// freely, subject to the following restrictions:
|
|
17
|
+
//
|
|
18
|
+
// 1. The origin of this software must not be misrepresented; you must not
|
|
19
|
+
// claim that you wrote the original software. If you use this software
|
|
20
|
+
// in a product, an acknowledgment in the product documentation would
|
|
21
|
+
// be appreciated but is not required.
|
|
22
|
+
//
|
|
23
|
+
// 2. Altered source versions must be plainly marked as such, and must not
|
|
24
|
+
// be misrepresented as being the original software.
|
|
25
|
+
//
|
|
26
|
+
// 3. This notice may not be removed or altered from any source
|
|
27
|
+
// distribution.
|
|
28
|
+
//
|
|
29
|
+
//========================================================================
|
|
30
|
+
|
|
31
|
+
#include "internal.h"
|
|
32
|
+
|
|
33
|
+
//========================================================================
|
|
34
|
+
// Most of the code in this source file is based on the mouse driver in
|
|
35
|
+
// Daniel Borca's GLUT implementation for DOS/MESA.
|
|
36
|
+
//========================================================================
|
|
37
|
+
|
|
38
|
+
//========================================================================
|
|
39
|
+
// Definitions
|
|
40
|
+
//========================================================================
|
|
41
|
+
|
|
42
|
+
#define _GLFW_MOUSE_STACK_SIZE 16384
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
// Assembler function prototypes
|
|
46
|
+
extern void _glfwMouseWrap( void );
|
|
47
|
+
extern int _glfwMouseWrap_end[];
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
//========================================================================
|
|
51
|
+
// Global variables
|
|
52
|
+
//========================================================================
|
|
53
|
+
|
|
54
|
+
static int _glfwMouseInstalled = 0;
|
|
55
|
+
|
|
56
|
+
static struct {
|
|
57
|
+
long Callback;
|
|
58
|
+
int Emulate3;
|
|
59
|
+
int OldX, OldY, OldB;
|
|
60
|
+
__dpmi_regs Regs;
|
|
61
|
+
} _glfwMouseDrv;
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
//************************************************************************
|
|
66
|
+
//**** Mouse Interrupt ***************************************************
|
|
67
|
+
//************************************************************************
|
|
68
|
+
|
|
69
|
+
//========================================================================
|
|
70
|
+
// _glfwMouseInt() - Mouse interrupt handler
|
|
71
|
+
//========================================================================
|
|
72
|
+
|
|
73
|
+
static void _glfwMouseInt( __dpmi_regs *r )
|
|
74
|
+
{
|
|
75
|
+
int newx, newy, dx, dy, dz, buttons;
|
|
76
|
+
_GLFWdosevent event;
|
|
77
|
+
struct mousemove_event *mousemove = &event.MouseMove;
|
|
78
|
+
struct mousewheel_event *mousewheel = &event.MouseWheel;
|
|
79
|
+
struct mousebutton_event *mousebutton = &event.MouseButton;
|
|
80
|
+
|
|
81
|
+
// Calculate mouse deltas
|
|
82
|
+
newx = (signed short)r->x.si;
|
|
83
|
+
newy = (signed short)r->x.di;
|
|
84
|
+
dx = newx - _glfwMouseDrv.OldX;
|
|
85
|
+
dy = newy - _glfwMouseDrv.OldY;
|
|
86
|
+
dz = (signed char)r->h.bh;
|
|
87
|
+
|
|
88
|
+
// Get mouse buttons status
|
|
89
|
+
buttons = r->h.bl;
|
|
90
|
+
|
|
91
|
+
// Emulate 3rd mouse button?
|
|
92
|
+
if( _glfwMouseDrv.Emulate3 )
|
|
93
|
+
{
|
|
94
|
+
if( (buttons & 3) == 3 )
|
|
95
|
+
{
|
|
96
|
+
buttons = 4;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Mouse moved?
|
|
101
|
+
if( dx || dy )
|
|
102
|
+
{
|
|
103
|
+
mousemove->Type = _GLFW_DOS_MOUSE_MOVE_EVENT;
|
|
104
|
+
mousemove->DeltaX = dx;
|
|
105
|
+
mousemove->DeltaY = dy;
|
|
106
|
+
_glfwPostDOSEvent( &event );
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Mouse wheel moved?
|
|
110
|
+
if( dz )
|
|
111
|
+
{
|
|
112
|
+
mousewheel->Type = _GLFW_DOS_MOUSE_WHEEL_EVENT;
|
|
113
|
+
mousewheel->WheelDelta = dz;
|
|
114
|
+
_glfwPostDOSEvent( &event );
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Button state changed?
|
|
118
|
+
if( buttons != _glfwMouseDrv.OldB )
|
|
119
|
+
{
|
|
120
|
+
mousebutton->Type = _GLFW_DOS_MOUSE_BUTTON_EVENT;
|
|
121
|
+
|
|
122
|
+
// Left mouse button changed?
|
|
123
|
+
if( (_glfwMouseDrv.OldB & 1) && !(buttons & 1) )
|
|
124
|
+
{
|
|
125
|
+
mousebutton->Button = GLFW_MOUSE_BUTTON_LEFT;
|
|
126
|
+
mousebutton->Action = GLFW_RELEASE;
|
|
127
|
+
_glfwPostDOSEvent( &event );
|
|
128
|
+
}
|
|
129
|
+
else if( !(_glfwMouseDrv.OldB & 1) && (buttons & 1) )
|
|
130
|
+
{
|
|
131
|
+
mousebutton->Button = GLFW_MOUSE_BUTTON_LEFT;
|
|
132
|
+
mousebutton->Action = GLFW_PRESS;
|
|
133
|
+
_glfwPostDOSEvent( &event );
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Right mouse button changed?
|
|
137
|
+
if( (_glfwMouseDrv.OldB & 2) && !(buttons & 2) )
|
|
138
|
+
{
|
|
139
|
+
mousebutton->Button = GLFW_MOUSE_BUTTON_RIGHT;
|
|
140
|
+
mousebutton->Action = GLFW_RELEASE;
|
|
141
|
+
_glfwPostDOSEvent( &event );
|
|
142
|
+
}
|
|
143
|
+
else if( !(_glfwMouseDrv.OldB & 2) && (buttons & 2) )
|
|
144
|
+
{
|
|
145
|
+
mousebutton->Button = GLFW_MOUSE_BUTTON_RIGHT;
|
|
146
|
+
mousebutton->Action = GLFW_PRESS;
|
|
147
|
+
_glfwPostDOSEvent( &event );
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Middle mouse button changed?
|
|
151
|
+
if( (_glfwMouseDrv.OldB & 4) && !(buttons & 4) )
|
|
152
|
+
{
|
|
153
|
+
mousebutton->Button = GLFW_MOUSE_BUTTON_MIDDLE;
|
|
154
|
+
mousebutton->Action = GLFW_RELEASE;
|
|
155
|
+
_glfwPostDOSEvent( &event );
|
|
156
|
+
}
|
|
157
|
+
else if( !(_glfwMouseDrv.OldB & 4) && (buttons & 4) )
|
|
158
|
+
{
|
|
159
|
+
mousebutton->Button = GLFW_MOUSE_BUTTON_MIDDLE;
|
|
160
|
+
mousebutton->Action = GLFW_PRESS;
|
|
161
|
+
_glfwPostDOSEvent( &event );
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Remember old mouse state
|
|
167
|
+
_glfwMouseDrv.OldX = newx;
|
|
168
|
+
_glfwMouseDrv.OldY = newy;
|
|
169
|
+
_glfwMouseDrv.OldB = buttons;
|
|
170
|
+
} ENDOFUNC(_glfwMouseInt)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
//************************************************************************
|
|
175
|
+
//**** GLFW internal functions ****
|
|
176
|
+
//************************************************************************
|
|
177
|
+
|
|
178
|
+
//========================================================================
|
|
179
|
+
// _glfwInitMouse() - Initialize mouse driver
|
|
180
|
+
//========================================================================
|
|
181
|
+
|
|
182
|
+
int _glfwInitMouse( void )
|
|
183
|
+
{
|
|
184
|
+
int buttons;
|
|
185
|
+
|
|
186
|
+
// Already installed?
|
|
187
|
+
if( _glfwMouseInstalled )
|
|
188
|
+
{
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Reset mouse and get status
|
|
193
|
+
__asm("\n\
|
|
194
|
+
xorl %%eax, %%eax \n\
|
|
195
|
+
int $0x33 \n\
|
|
196
|
+
andl %%ebx, %%eax \n\
|
|
197
|
+
movl %%eax, %0 \n\
|
|
198
|
+
":"=g" (buttons)::"%eax", "%ebx");
|
|
199
|
+
if( !buttons )
|
|
200
|
+
{
|
|
201
|
+
return 0;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Lock data and functions
|
|
205
|
+
LOCKDATA( _glfwMouseDrv );
|
|
206
|
+
LOCKBUFF( _glfwMouseWrap_end, 8 );
|
|
207
|
+
LOCKFUNC( _glfwMouseInt );
|
|
208
|
+
LOCKFUNC( _glfwMouseWrap );
|
|
209
|
+
|
|
210
|
+
_glfwMouseWrap_end[1] = __djgpp_ds_alias;
|
|
211
|
+
|
|
212
|
+
// Grab a locked stack
|
|
213
|
+
_glfwMouseWrap_end[0] = (int)malloc( _GLFW_MOUSE_STACK_SIZE );
|
|
214
|
+
if( _glfwMouseWrap_end[0] == NULL )
|
|
215
|
+
{
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
LOCKBUFF( _glfwMouseWrap_end[0], _GLFW_MOUSE_STACK_SIZE );
|
|
219
|
+
|
|
220
|
+
// Try to hook a call-back
|
|
221
|
+
__asm("\n\
|
|
222
|
+
pushl %%ds \n\
|
|
223
|
+
pushl %%es \n\
|
|
224
|
+
movw $0x0303, %%ax \n\
|
|
225
|
+
pushl %%ds \n\
|
|
226
|
+
pushl %%cs \n\
|
|
227
|
+
popl %%ds \n\
|
|
228
|
+
popl %%es \n\
|
|
229
|
+
int $0x31 \n\
|
|
230
|
+
popl %%es \n\
|
|
231
|
+
popl %%ds \n\
|
|
232
|
+
jc 0f \n\
|
|
233
|
+
shll $16, %%ecx \n\
|
|
234
|
+
movw %%dx, %%cx \n\
|
|
235
|
+
movl %%ecx, %0 \n\
|
|
236
|
+
0: \n\
|
|
237
|
+
":"=g"(_glfwMouseDrv.Callback)
|
|
238
|
+
:"S" (_glfwMouseWrap), "D"(&_glfwMouseDrv.Regs)
|
|
239
|
+
:"%eax", "%ecx", "%edx");
|
|
240
|
+
if( !_glfwMouseDrv.Callback )
|
|
241
|
+
{
|
|
242
|
+
free( (void *)_glfwMouseWrap_end[0] );
|
|
243
|
+
return 0;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Adjust stack
|
|
247
|
+
_glfwMouseWrap_end[0] += _GLFW_MOUSE_STACK_SIZE;
|
|
248
|
+
|
|
249
|
+
// Install the handler
|
|
250
|
+
_glfwMouseDrv.Regs.x.ax = 0x000c;
|
|
251
|
+
_glfwMouseDrv.Regs.x.cx = 0x7f | 0x80;
|
|
252
|
+
_glfwMouseDrv.Regs.x.dx = _glfwMouseDrv.Callback & 0xffff;
|
|
253
|
+
_glfwMouseDrv.Regs.x.es = _glfwMouseDrv.Callback >> 16;
|
|
254
|
+
__dpmi_int( 0x33, &_glfwMouseDrv.Regs );
|
|
255
|
+
|
|
256
|
+
// Clear mickeys
|
|
257
|
+
__asm __volatile ("\n\
|
|
258
|
+
movw $0xb, %%ax; \n\
|
|
259
|
+
int $0x33 \n\
|
|
260
|
+
":::"%eax", "%ecx", "%edx");
|
|
261
|
+
|
|
262
|
+
_glfwMouseDrv.OldX = 0;
|
|
263
|
+
_glfwMouseDrv.OldY = 0;
|
|
264
|
+
_glfwMouseDrv.OldB = 0;
|
|
265
|
+
|
|
266
|
+
// Emulate third mouse button?
|
|
267
|
+
_glfwMouseDrv.Emulate3 = buttons < 3;
|
|
268
|
+
|
|
269
|
+
return 1;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
//========================================================================
|
|
274
|
+
// _glfwTerminateMouse() - Terminate mouse driver
|
|
275
|
+
//========================================================================
|
|
276
|
+
|
|
277
|
+
void _glfwTerminateMouse( void )
|
|
278
|
+
{
|
|
279
|
+
if( !_glfwMouseInstalled )
|
|
280
|
+
{
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
__asm("\n\
|
|
285
|
+
movl %%edx, %%ecx \n\
|
|
286
|
+
shrl $16, %%ecx \n\
|
|
287
|
+
movw $0x0304, %%ax \n\
|
|
288
|
+
int $0x31 \n\
|
|
289
|
+
movw $0x000c, %%ax \n\
|
|
290
|
+
xorl %%ecx, %%ecx \n\
|
|
291
|
+
int $0x33 \n\
|
|
292
|
+
"::"d"(_glfwMouseDrv.Callback):"%eax", "%ecx");
|
|
293
|
+
_glfwMouseDrv.Callback = 0;
|
|
294
|
+
|
|
295
|
+
free( (void *)(_glfwMouseWrap_end[0] - _GLFW_MOUSE_STACK_SIZE) );
|
|
296
|
+
|
|
297
|
+
_glfwMouseInstalled = 0;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
//========================================================================
|
|
303
|
+
// _glfwMouseWrap()
|
|
304
|
+
//========================================================================
|
|
305
|
+
|
|
306
|
+
// Hack alert: `_glfwMouseWrap_end' actually holds the address of stack in
|
|
307
|
+
// a safe data selector.
|
|
308
|
+
|
|
309
|
+
__asm("\n\
|
|
310
|
+
.text \n\
|
|
311
|
+
.p2align 5,,31 \n\
|
|
312
|
+
.global __glfwMouseWrap \n\
|
|
313
|
+
__glfwMouseWrap: \n\
|
|
314
|
+
cld \n\
|
|
315
|
+
lodsl \n\
|
|
316
|
+
movl %eax, %es:42(%edi) \n\
|
|
317
|
+
addw $4, %es:46(%edi) \n\
|
|
318
|
+
pushl %es \n\
|
|
319
|
+
movl %ss, %ebx \n\
|
|
320
|
+
movl %esp, %esi \n\
|
|
321
|
+
lss %cs:__glfwMouseWrap_end, %esp\n\
|
|
322
|
+
pushl %ss \n\
|
|
323
|
+
pushl %ss \n\
|
|
324
|
+
popl %es \n\
|
|
325
|
+
popl %ds \n\
|
|
326
|
+
movl ___djgpp_dos_sel, %fs \n\
|
|
327
|
+
pushl %fs \n\
|
|
328
|
+
popl %gs \n\
|
|
329
|
+
pushl %edi \n\
|
|
330
|
+
call __glfwMouseInt \n\
|
|
331
|
+
popl %edi \n\
|
|
332
|
+
movl %ebx, %ss \n\
|
|
333
|
+
movl %esi, %esp \n\
|
|
334
|
+
popl %es \n\
|
|
335
|
+
iret \n\
|
|
336
|
+
.global __glfwMouseWrap_end \n\
|
|
337
|
+
__glfwMouseWrap_end:.long 0, 0");
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
//========================================================================
|
|
2
|
+
// GLFW - An OpenGL framework
|
|
3
|
+
// File: dos_thread.c
|
|
4
|
+
// Platform: DOS
|
|
5
|
+
// API version: 2.6
|
|
6
|
+
// WWW: http://glfw.sourceforge.net
|
|
7
|
+
//------------------------------------------------------------------------
|
|
8
|
+
// Copyright (c) 2002-2006 Camilla Berglund
|
|
9
|
+
//
|
|
10
|
+
// This software is provided 'as-is', without any express or implied
|
|
11
|
+
// warranty. In no event will the authors be held liable for any damages
|
|
12
|
+
// arising from the use of this software.
|
|
13
|
+
//
|
|
14
|
+
// Permission is granted to anyone to use this software for any purpose,
|
|
15
|
+
// including commercial applications, and to alter it and redistribute it
|
|
16
|
+
// freely, subject to the following restrictions:
|
|
17
|
+
//
|
|
18
|
+
// 1. The origin of this software must not be misrepresented; you must not
|
|
19
|
+
// claim that you wrote the original software. If you use this software
|
|
20
|
+
// in a product, an acknowledgment in the product documentation would
|
|
21
|
+
// be appreciated but is not required.
|
|
22
|
+
//
|
|
23
|
+
// 2. Altered source versions must be plainly marked as such, and must not
|
|
24
|
+
// be misrepresented as being the original software.
|
|
25
|
+
//
|
|
26
|
+
// 3. This notice may not be removed or altered from any source
|
|
27
|
+
// distribution.
|
|
28
|
+
//
|
|
29
|
+
//========================================================================
|
|
30
|
+
|
|
31
|
+
#include "internal.h"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
//************************************************************************
|
|
36
|
+
//**** GLFW internal functions ****
|
|
37
|
+
//************************************************************************
|
|
38
|
+
|
|
39
|
+
//========================================================================
|
|
40
|
+
// _glfwInitThreads() - Initialize GLFW thread package
|
|
41
|
+
//========================================================================
|
|
42
|
+
|
|
43
|
+
int _glfwInitThreads( void )
|
|
44
|
+
{
|
|
45
|
+
// TODO
|
|
46
|
+
_glfwThrd.First.Previous = NULL;
|
|
47
|
+
_glfwThrd.First.Next = NULL;
|
|
48
|
+
_glfwThrd.First.ID = 0;
|
|
49
|
+
_glfwThrd.NextID = 1;
|
|
50
|
+
|
|
51
|
+
return 1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
//========================================================================
|
|
56
|
+
// _glfwTerminateThreads() - Terminate GLFW thread package
|
|
57
|
+
//========================================================================
|
|
58
|
+
|
|
59
|
+
void _glfwTerminateThreads( void )
|
|
60
|
+
{
|
|
61
|
+
_GLFWthread *t, *t_next;
|
|
62
|
+
|
|
63
|
+
// Enter critical section
|
|
64
|
+
ENTER_THREAD_CRITICAL_SECTION
|
|
65
|
+
|
|
66
|
+
// Kill all threads (NOTE: THE USER SHOULD WAIT FOR ALL THREADS TO
|
|
67
|
+
// DIE, _BEFORE_ CALLING glfwTerminate()!!!)
|
|
68
|
+
t = _glfwThrd.First.Next;
|
|
69
|
+
while( t != NULL )
|
|
70
|
+
{
|
|
71
|
+
// Get pointer to next thread
|
|
72
|
+
t_next = t->Next;
|
|
73
|
+
|
|
74
|
+
// Simply murder the process, no mercy!
|
|
75
|
+
// TODO
|
|
76
|
+
|
|
77
|
+
// Free memory allocated for this thread
|
|
78
|
+
free( (void *) t );
|
|
79
|
+
|
|
80
|
+
// Select next thread in list
|
|
81
|
+
t = t_next;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Leave critical section
|
|
85
|
+
LEAVE_THREAD_CRITICAL_SECTION
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
//************************************************************************
|
|
91
|
+
//**** Platform implementation functions ****
|
|
92
|
+
//************************************************************************
|
|
93
|
+
|
|
94
|
+
//========================================================================
|
|
95
|
+
// _glfwPlatformCreateThread() - Create a new thread
|
|
96
|
+
//========================================================================
|
|
97
|
+
|
|
98
|
+
GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg )
|
|
99
|
+
{
|
|
100
|
+
// TODO
|
|
101
|
+
return -1;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
//========================================================================
|
|
106
|
+
// _glfwPlatformDestroyThread() - Kill a thread. NOTE: THIS IS A VERY
|
|
107
|
+
// DANGEROUS OPERATION, AND SHOULD NOT BE USED EXCEPT IN EXTREME
|
|
108
|
+
// SITUATIONS!
|
|
109
|
+
//========================================================================
|
|
110
|
+
|
|
111
|
+
void _glfwPlatformDestroyThread( GLFWthread ID )
|
|
112
|
+
{
|
|
113
|
+
_GLFWthread *t, *t_wait;
|
|
114
|
+
|
|
115
|
+
// Enter critical section
|
|
116
|
+
ENTER_THREAD_CRITICAL_SECTION
|
|
117
|
+
|
|
118
|
+
// Get thread information pointer
|
|
119
|
+
t = _glfwGetThreadPointer( ID );
|
|
120
|
+
if( t == NULL )
|
|
121
|
+
{
|
|
122
|
+
LEAVE_THREAD_CRITICAL_SECTION
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Simply murder the process, no mercy!
|
|
127
|
+
// TODO
|
|
128
|
+
|
|
129
|
+
// Remove thread from thread list
|
|
130
|
+
_glfwRemoveThread( t );
|
|
131
|
+
|
|
132
|
+
// Signal any waiting threads that the thread has died
|
|
133
|
+
// TODO
|
|
134
|
+
|
|
135
|
+
// Leave critical section
|
|
136
|
+
LEAVE_THREAD_CRITICAL_SECTION
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
//========================================================================
|
|
141
|
+
// _glfwPlatformWaitThread() - Wait for a thread to die
|
|
142
|
+
//========================================================================
|
|
143
|
+
|
|
144
|
+
int _glfwPlatformWaitThread( GLFWthread ID, int waitmode )
|
|
145
|
+
{
|
|
146
|
+
// TODO
|
|
147
|
+
return GL_FALSE;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
//========================================================================
|
|
152
|
+
// _glfwPlatformGetThreadID() - Return the thread ID for the current
|
|
153
|
+
// thread
|
|
154
|
+
//========================================================================
|
|
155
|
+
|
|
156
|
+
GLFWthread _glfwPlatformGetThreadID( void )
|
|
157
|
+
{
|
|
158
|
+
// TODO
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
//========================================================================
|
|
164
|
+
// _glfwPlatformCreateMutex() - Create a mutual exclusion object
|
|
165
|
+
//========================================================================
|
|
166
|
+
|
|
167
|
+
GLFWmutex _glfwPlatformCreateMutex( void )
|
|
168
|
+
{
|
|
169
|
+
// TODO
|
|
170
|
+
return NULL;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
//========================================================================
|
|
175
|
+
// _glfwPlatformDestroyMutex() - Destroy a mutual exclusion object
|
|
176
|
+
//========================================================================
|
|
177
|
+
|
|
178
|
+
void _glfwPlatformDestroyMutex( GLFWmutex mutex )
|
|
179
|
+
{
|
|
180
|
+
// TODO
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
//========================================================================
|
|
185
|
+
// _glfwPlatformLockMutex() - Request access to a mutex
|
|
186
|
+
//========================================================================
|
|
187
|
+
|
|
188
|
+
void _glfwPlatformLockMutex( GLFWmutex mutex )
|
|
189
|
+
{
|
|
190
|
+
// TODO
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
//========================================================================
|
|
195
|
+
// _glfwPlatformUnlockMutex() - Release a mutex
|
|
196
|
+
//========================================================================
|
|
197
|
+
|
|
198
|
+
void _glfwPlatformUnlockMutex( GLFWmutex mutex )
|
|
199
|
+
{
|
|
200
|
+
// TODO
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
//========================================================================
|
|
205
|
+
// _glfwPlatformCreateCond() - Create a new condition variable object
|
|
206
|
+
//========================================================================
|
|
207
|
+
|
|
208
|
+
GLFWcond _glfwPlatformCreateCond( void )
|
|
209
|
+
{
|
|
210
|
+
// TODO
|
|
211
|
+
return NULL;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
//========================================================================
|
|
216
|
+
// _glfwPlatformDestroyCond() - Destroy a condition variable object
|
|
217
|
+
//========================================================================
|
|
218
|
+
|
|
219
|
+
void _glfwPlatformDestroyCond( GLFWcond cond )
|
|
220
|
+
{
|
|
221
|
+
// TODO
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
//========================================================================
|
|
226
|
+
// _glfwPlatformWaitCond() - Wait for a condition to be raised
|
|
227
|
+
//========================================================================
|
|
228
|
+
|
|
229
|
+
void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex,
|
|
230
|
+
double timeout )
|
|
231
|
+
{
|
|
232
|
+
// TODO
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
//========================================================================
|
|
237
|
+
// _glfwPlatformSignalCond() - Signal a condition to one waiting thread
|
|
238
|
+
//========================================================================
|
|
239
|
+
|
|
240
|
+
void _glfwPlatformSignalCond( GLFWcond cond )
|
|
241
|
+
{
|
|
242
|
+
// TODO
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
//========================================================================
|
|
247
|
+
// _glfwPlatformBroadcastCond() - Broadcast a condition to all waiting
|
|
248
|
+
// threads
|
|
249
|
+
//========================================================================
|
|
250
|
+
|
|
251
|
+
void _glfwPlatformBroadcastCond( GLFWcond cond )
|
|
252
|
+
{
|
|
253
|
+
// TODO
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
//========================================================================
|
|
258
|
+
// _glfwPlatformGetNumberOfProcessors() - Return the number of processors
|
|
259
|
+
// in the system.
|
|
260
|
+
//========================================================================
|
|
261
|
+
|
|
262
|
+
int _glfwPlatformGetNumberOfProcessors( void )
|
|
263
|
+
{
|
|
264
|
+
// Return number of processors online (DOS does not support multiple
|
|
265
|
+
// CPUs...)
|
|
266
|
+
return 1;
|
|
267
|
+
}
|