aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/Mesa_6.4.1/src/glut/dos/state.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/extras/Mesa_6.4.1/src/glut/dos/state.c')
-rw-r--r--nx-X11/extras/Mesa_6.4.1/src/glut/dos/state.c238
1 files changed, 238 insertions, 0 deletions
diff --git a/nx-X11/extras/Mesa_6.4.1/src/glut/dos/state.c b/nx-X11/extras/Mesa_6.4.1/src/glut/dos/state.c
new file mode 100644
index 000000000..b0d5d8ae9
--- /dev/null
+++ b/nx-X11/extras/Mesa_6.4.1/src/glut/dos/state.c
@@ -0,0 +1,238 @@
+/*
+ * DOS/DJGPP Mesa Utility Toolkit
+ * Version: 1.0
+ *
+ * Copyright (C) 2005 Daniel Borca All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * DANIEL BORCA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+#include <stdio.h>
+
+#include "internal.h"
+
+
+#define FREQUENCY 100 /* set this to zero to use the default timer */
+
+
+static int timer_installed;
+#if FREQUENCY
+static volatile int ticks;
+
+
+static void
+ticks_timer (void *p)
+{
+ (void)p;
+ ticks++;
+} ENDOFUNC(ticks_timer)
+#else
+#include <time.h>
+
+static struct timeval then;
+#endif
+
+
+int APIENTRY
+glutGet (GLenum type)
+{
+ switch (type) {
+ case GLUT_WINDOW_X:
+ return _glut_current->xpos;
+ case GLUT_WINDOW_Y:
+ return _glut_current->ypos;
+ case GLUT_WINDOW_WIDTH:
+ return _glut_current->width;
+ case GLUT_WINDOW_HEIGHT:
+ return _glut_current->height;
+ case GLUT_WINDOW_STENCIL_SIZE:
+ return _glut_visual.stencil;
+ case GLUT_WINDOW_DEPTH_SIZE:
+ return _glut_visual.depth;
+ case GLUT_WINDOW_RGBA:
+ return !(_glut_default.mode & GLUT_INDEX);
+ case GLUT_WINDOW_COLORMAP_SIZE:
+ return (_glut_default.mode & GLUT_INDEX) ? (256 - RESERVED_COLORS) : 0;
+ case GLUT_SCREEN_WIDTH:
+ return _glut_visual.geometry[0];
+ case GLUT_SCREEN_HEIGHT:
+ return _glut_visual.geometry[1];
+ case GLUT_INIT_WINDOW_X:
+ return _glut_default.x;
+ case GLUT_INIT_WINDOW_Y:
+ return _glut_default.y;
+ case GLUT_INIT_WINDOW_WIDTH:
+ return _glut_default.width;
+ case GLUT_INIT_WINDOW_HEIGHT:
+ return _glut_default.height;
+ case GLUT_INIT_DISPLAY_MODE:
+ return _glut_default.mode;
+ case GLUT_ELAPSED_TIME:
+#if FREQUENCY
+ if (!timer_installed) {
+ timer_installed = GL_TRUE;
+ LOCKDATA(ticks);
+ LOCKFUNC(ticks_timer);
+ pc_install_int(ticks_timer, NULL, FREQUENCY);
+ }
+ return ticks * 1000 / FREQUENCY;
+#else
+ if (!timer_installed) {
+ timer_installed = GL_TRUE;
+ gettimeofday(&then, NULL);
+ return 0;
+ } else {
+ struct timeval now;
+ gettimeofday(&now, NULL);
+ return (now.tv_usec - then.tv_usec) / 1000 +
+ (now.tv_sec - then.tv_sec) * 1000;
+ }
+#endif
+ default:
+ return -1;
+ }
+}
+
+
+int APIENTRY
+glutDeviceGet (GLenum type)
+{
+ switch (type) {
+ case GLUT_HAS_KEYBOARD:
+ return GL_TRUE;
+ case GLUT_HAS_MOUSE:
+ return (_glut_mouse != 0);
+ case GLUT_NUM_MOUSE_BUTTONS:
+ return _glut_mouse;
+ case GLUT_HAS_SPACEBALL:
+ case GLUT_HAS_DIAL_AND_BUTTON_BOX:
+ case GLUT_HAS_TABLET:
+ return GL_FALSE;
+ case GLUT_NUM_SPACEBALL_BUTTONS:
+ case GLUT_NUM_BUTTON_BOX_BUTTONS:
+ case GLUT_NUM_DIALS:
+ case GLUT_NUM_TABLET_BUTTONS:
+ return 0;
+ default:
+ return -1;
+ }
+}
+
+
+int APIENTRY
+glutGetModifiers (void)
+{
+ int mod = 0;
+ int shifts = pc_keyshifts();
+
+ if (shifts & (KB_SHIFT_FLAG | KB_CAPSLOCK_FLAG)) {
+ mod |= GLUT_ACTIVE_SHIFT;
+ }
+
+ if (shifts & KB_ALT_FLAG) {
+ mod |= GLUT_ACTIVE_ALT;
+ }
+
+ if (shifts & KB_CTRL_FLAG) {
+ mod |= GLUT_ACTIVE_CTRL;
+ }
+
+ return mod;
+}
+
+
+void APIENTRY
+glutReportErrors (void)
+{
+ /* reports all the OpenGL errors that happened till now */
+}
+
+
+/* GAME MODE
+ * Hack alert: incomplete... what is GameMode, anyway?
+ */
+static GLint game;
+static GLboolean game_possible;
+static GLboolean game_active;
+static GLuint game_width;
+static GLuint game_height;
+static GLuint game_bpp;
+static GLuint game_refresh;
+
+
+void APIENTRY
+glutGameModeString (const char *string)
+{
+ if (sscanf(string, "%ux%u:%u@%u", &game_width, &game_height, &game_bpp, &game_refresh) == 4) {
+ game_possible = GL_TRUE;
+ }
+}
+
+
+int APIENTRY
+glutGameModeGet (GLenum mode)
+{
+ switch (mode) {
+ case GLUT_GAME_MODE_ACTIVE:
+ return game_active;
+ case GLUT_GAME_MODE_POSSIBLE:
+ return game_possible && !_glut_current;
+ case GLUT_GAME_MODE_WIDTH:
+ return game_active ? (int)game_width : -1;
+ case GLUT_GAME_MODE_HEIGHT:
+ return game_active ? (int)game_height : -1;
+ case GLUT_GAME_MODE_PIXEL_DEPTH:
+ return game_active ? (int)game_bpp : -1;
+ case GLUT_GAME_MODE_REFRESH_RATE:
+ return game_active ? (int)game_refresh : -1;
+ default:
+ return -1;
+ }
+}
+
+
+int APIENTRY
+glutEnterGameMode (void)
+{
+ if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) {
+ _glut_visual.bpp = game_bpp;
+ _glut_visual.refresh = game_refresh;
+
+ glutInitWindowSize(game_width, game_height);
+
+ if ((game = glutCreateWindow("<game>")) > 0) {
+ game_active = GL_TRUE;
+ }
+
+ return game;
+ } else {
+ return 0;
+ }
+}
+
+
+void GLUTAPIENTRY
+glutLeaveGameMode (void)
+{
+ if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
+ game_active = GL_FALSE;
+
+ glutDestroyWindow(game);
+ }
+}