/* * Mesa 3-D graphics library * Version: 3.4 * Copyright (C) 1995-1998 Brian Paul * * 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. */ /* * DOS/DJGPP glut driver v1.3 for Mesa * * Copyright (C) 2002 - Borca Daniel * Email : dborca@yahoo.com * Web : http://www.geocities.com/dborca */ #include "glutint.h" #define FREQUENCY 100 static int timer_installed; static volatile int ticks; static void ticks_timer (void *p) { (void)p; ticks++; } ENDOFUNC(ticks_timer) 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 STENCIL_SIZE; case GLUT_WINDOW_DEPTH_SIZE: return DEPTH_SIZE; 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; } } 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; } } 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; }