summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/glut/dos/state.c276
1 files changed, 146 insertions, 130 deletions
diff --git a/src/glut/dos/state.c b/src/glut/dos/state.c
index b245569610..4f74f24304 100644
--- a/src/glut/dos/state.c
+++ b/src/glut/dos/state.c
@@ -19,9 +19,9 @@
*/
/*
- * DOS/DJGPP glut driver v1.4 for Mesa
+ * DOS/DJGPP glut driver v1.5 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
@@ -32,119 +32,135 @@
#include "glutint.h"
-
-#define FREQUENCY 100
-
+#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)
+static void
+ticks_timer (void *p)
{
- (void)p;
- ticks++;
+ (void)p;
+ ticks++;
} ENDOFUNC(ticks_timer)
+#else
+#include <time.h>
+static struct timeval then;
+#endif
-int APIENTRY glutGet (GLenum type)
+int APIENTRY
+glutGet (GLenum type)
{
- switch (type) {
- case GLUT_WINDOW_X:
- return g_curwin->xpos;
- case GLUT_WINDOW_Y:
- return g_curwin->ypos;
- case GLUT_WINDOW_WIDTH:
- return g_curwin->width;
- case GLUT_WINDOW_HEIGHT:
- return g_curwin->height;
- case GLUT_WINDOW_STENCIL_SIZE:
- return g_stencil;
- case GLUT_WINDOW_DEPTH_SIZE:
- return g_depth;
- case GLUT_WINDOW_RGBA:
- return !(g_display_mode & GLUT_INDEX);
- case GLUT_WINDOW_COLORMAP_SIZE:
- return (g_display_mode & GLUT_INDEX) ? (256 - RESERVED_COLORS) : 0;
- case GLUT_SCREEN_WIDTH:
- return g_screen_w;
- case GLUT_SCREEN_HEIGHT:
- return g_screen_h;
- case GLUT_INIT_WINDOW_X:
- return g_init_x;
- case GLUT_INIT_WINDOW_Y:
- return g_init_y;
- case GLUT_INIT_WINDOW_WIDTH:
- return g_init_w;
- case GLUT_INIT_WINDOW_HEIGHT:
- return g_init_h;
- case GLUT_INIT_DISPLAY_MODE:
- return g_display_mode;
- case GLUT_ELAPSED_TIME:
- if (!timer_installed) {
- timer_installed = GL_TRUE;
- LOCKDATA(ticks);
- LOCKFUNC(ticks_timer);
- pc_install_int(ticks_timer, NULL, FREQUENCY);
- }
- return ticks*1000/FREQUENCY;
- default:
- return -1;
- }
+ switch (type) {
+ case GLUT_WINDOW_X:
+ return g_curwin->xpos;
+ case GLUT_WINDOW_Y:
+ return g_curwin->ypos;
+ case GLUT_WINDOW_WIDTH:
+ return g_curwin->width;
+ case GLUT_WINDOW_HEIGHT:
+ return g_curwin->height;
+ case GLUT_WINDOW_STENCIL_SIZE:
+ return g_stencil;
+ case GLUT_WINDOW_DEPTH_SIZE:
+ return g_depth;
+ case GLUT_WINDOW_RGBA:
+ return !(g_display_mode & GLUT_INDEX);
+ case GLUT_WINDOW_COLORMAP_SIZE:
+ return (g_display_mode & GLUT_INDEX) ? (256 - RESERVED_COLORS) : 0;
+ case GLUT_SCREEN_WIDTH:
+ return g_screen_w;
+ case GLUT_SCREEN_HEIGHT:
+ return g_screen_h;
+ case GLUT_INIT_WINDOW_X:
+ return g_init_x;
+ case GLUT_INIT_WINDOW_Y:
+ return g_init_y;
+ case GLUT_INIT_WINDOW_WIDTH:
+ return g_init_w;
+ case GLUT_INIT_WINDOW_HEIGHT:
+ return g_init_h;
+ case GLUT_INIT_DISPLAY_MODE:
+ return g_display_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)
+int APIENTRY
+glutDeviceGet (GLenum type)
{
- switch (type) {
- case GLUT_HAS_KEYBOARD:
- return GL_TRUE;
- case GLUT_HAS_MOUSE:
- return (g_mouse != 0);
- case GLUT_NUM_MOUSE_BUTTONS:
- return g_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;
- }
+ switch (type) {
+ case GLUT_HAS_KEYBOARD:
+ return GL_TRUE;
+ case GLUT_HAS_MOUSE:
+ return (g_mouse != 0);
+ case GLUT_NUM_MOUSE_BUTTONS:
+ return g_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 APIENTRY
+glutGetModifiers (void)
{
- int mod = 0;
- int shifts = pc_keyshifts();
+ int mod = 0;
+ int shifts = pc_keyshifts();
- if (shifts & (KB_SHIFT_FLAG | KB_CAPSLOCK_FLAG)) {
- mod |= GLUT_ACTIVE_SHIFT;
- }
+ if (shifts & (KB_SHIFT_FLAG | KB_CAPSLOCK_FLAG)) {
+ mod |= GLUT_ACTIVE_SHIFT;
+ }
- if (shifts & KB_ALT_FLAG) {
- mod |= GLUT_ACTIVE_ALT;
- }
+ if (shifts & KB_ALT_FLAG) {
+ mod |= GLUT_ACTIVE_ALT;
+ }
- if (shifts & KB_CTRL_FLAG) {
- mod |= GLUT_ACTIVE_CTRL;
- }
+ if (shifts & KB_CTRL_FLAG) {
+ mod |= GLUT_ACTIVE_CTRL;
+ }
- return mod;
+ return mod;
}
-
/* GAME MODE
* Hack alert: incomplete... what is GameMode, anyway?
*/
@@ -157,63 +173,63 @@ static GLuint game_bpp;
static GLuint game_refresh;
-
-void APIENTRY glutGameModeString (const char *string)
+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;
- }
+ 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)
+int APIENTRY
+glutGameModeGet (GLenum mode)
{
- switch (mode) {
- case GLUT_GAME_MODE_ACTIVE:
- return game_active;
- case GLUT_GAME_MODE_POSSIBLE:
- return game_possible && !g_curwin;
- 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;
- }
+ switch (mode) {
+ case GLUT_GAME_MODE_ACTIVE:
+ return game_active;
+ case GLUT_GAME_MODE_POSSIBLE:
+ return game_possible && !g_curwin;
+ 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)
+int APIENTRY
+glutEnterGameMode (void)
{
- if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) {
- g_bpp = game_bpp;
- g_refresh = game_refresh;
+ if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) {
+ g_bpp = game_bpp;
+ g_refresh = game_refresh;
- glutInitWindowSize(game_width, game_height);
+ glutInitWindowSize(game_width, game_height);
- if ((g_game = glutCreateWindow("<game>")) > 0) {
- game_active = GL_TRUE;
- }
+ if ((g_game = glutCreateWindow("<game>")) > 0) {
+ game_active = GL_TRUE;
+ }
- return g_game;
- } else {
- return 0;
- }
+ return g_game;
+ } else {
+ return 0;
+ }
}
-
-void GLUTAPIENTRY glutLeaveGameMode (void)
+void GLUTAPIENTRY
+glutLeaveGameMode (void)
{
- if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
- game_active = GL_FALSE;
+ if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
+ game_active = GL_FALSE;
- glutDestroyWindow(g_game);
- }
+ glutDestroyWindow(g_game);
+ }
}