Fix invalid enums passed to MapBuffer
[mesa.git] / src / glut / dos / init.c
index 5d09561dac3e6781e81af9b60a5e10c5df6591ef..3a98dcf0a4bc9ad97f8bcb6cb6adc8065de22021 100644 (file)
 /*
- * Mesa 3-D graphics library
- * Version:  4.0
- * Copyright (C) 1995-1998  Brian Paul
+ * DOS/DJGPP Mesa Utility Toolkit
+ * Version:  1.0
  *
- * 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.
+ * Copyright (C) 2005  Daniel Borca   All Rights Reserved.
  *
- * 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.
+ * 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:
  *
- * 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
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
  *
- *  Copyright (C) 2002 - Borca Daniel
- *  Email : dborca@yahoo.com
- *  Web   : http://www.geocities.com/dborca
+ * 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 <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
-#include "glutint.h"
+#include "internal.h"
 
 
+char *__glutProgramName = NULL;
 
-GLboolean g_redisplay = GL_FALSE;
+GLUTvisual _glut_visual = {
+   16, 8, 16, 8, 16, /* bpp, alpha, depth, stencil, accum */
 
-GLuint g_bpp = DEFAULT_BPP;
-GLuint g_refresh = 0;
-GLuint g_screen_w, g_screen_h;
-GLint g_driver_caps;
+   { 0, 0 }, 0,      /* geometry */
 
-GLuint g_fps = 0;
+   0                 /* flags */
+};
 
-GLuint g_display_mode = 0;
-int g_init_x = 0, g_init_y = 0;
-GLuint g_init_w = DEFAULT_WIDTH, g_init_h = DEFAULT_HEIGHT;
+GLUTdefault _glut_default = {
+   0, 0,             /* glutInitWindowPosition */
+   300, 300,         /* glutInitWindowSize */
+   0                 /* glutInitDisplayMode */
+};
 
-char *__glutProgramName = NULL;
+GLuint _glut_fps = 0;
 
+static char *init_string;
 
 
-void APIENTRY glutInit (int *argc, char **argv)
+void
+_glut_fatal (char *format,...)
 {
- char *str;
- const char *env;
+  va_list args;
+
+  va_start(args, format);
+  fprintf(stderr, "GLUT: Fatal Error in %s: ",
+    __glutProgramName ? __glutProgramName : "(unamed)");
+  vfprintf(stderr, format, args);
+  va_end(args);
+  putc('\n', stderr);
+  exit(1);
+}
 
- if ((env = getenv("DMESA_GLUT_BPP")) != NULL) {
-    g_bpp = atoi(env);
- }
- if ((env = getenv("DMESA_GLUT_REFRESH")) != NULL) {
-    g_refresh = atoi(env);
- }
 
- /* Determine program name. */
- str = strrchr(argv[0], '/');
- if (str == NULL) {
-    str = argv[0];
- } else {
-    str++;
- }
- __glutProgramName = __glutStrdup(str);
+/* strdup is actually not a standard ANSI C or POSIX routine
+ * so implement a private one for GLUT.
+ */
+static char *
+_glut_strdup (const char *string)
+{
+   if (string != NULL) {
+      int len = strlen(string) + 1;
+      char *p = malloc(len);
+      if (p != NULL) {
+         return strcpy(p, string);
+      }
+   }
+   return NULL;
+}
 
- /* check if GLUT_FPS env var is set */
- if ((env = getenv("GLUT_FPS")) != NULL) {
-    if ((g_fps = atoi(env)) <= 0) {
-       g_fps = 5000; /* 5000 milliseconds */
-    }
- }
 
- /* Initialize timer */
- glutGet(GLUT_ELAPSED_TIME);
+void APIENTRY
+glutInit (int *argc, char **argv)
+{
+   char *str;
+   const char *env;
+
+   if ((env = getenv("DMESA_GLUT_BPP")) != NULL) {
+      _glut_visual.bpp = atoi(env);
+   }
+   if ((env = getenv("DMESA_GLUT_ALPHA")) != NULL) {
+      _glut_visual.alpha = atoi(env);
+   }
+   if ((env = getenv("DMESA_GLUT_DEPTH")) != NULL) {
+      _glut_visual.depth = atoi(env);
+   }
+   if ((env = getenv("DMESA_GLUT_STENCIL")) != NULL) {
+      _glut_visual.stencil = atoi(env);
+   }
+   if ((env = getenv("DMESA_GLUT_ACCUM")) != NULL) {
+      _glut_visual.accum = atoi(env);
+   }
+   if ((env = getenv("DMESA_GLUT_REFRESH")) != NULL) {
+      _glut_visual.refresh = atoi(env);
+   }
+
+   /* Determine program name. */
+   str = strrchr(argv[0], '/');
+   if (str == NULL) {
+      str = argv[0];
+   } else {
+      str++;
+   }
+   __glutProgramName = _glut_strdup(str);
+
+   /* check if GLUT_FPS env var is set */
+   if ((env = getenv("GLUT_FPS")) != NULL) {
+      if ((_glut_fps = atoi(env)) <= 0) {
+         _glut_fps = 5000; /* 5000 milliseconds */
+      }
+   }
+
+   /* Initialize timer */
+   glutGet(GLUT_ELAPSED_TIME);
 }
 
 
+void APIENTRY
+glutInitDisplayMode (unsigned int mode)
+{
+   _glut_default.mode = mode;
+}
+
 
-void APIENTRY glutInitDisplayMode (unsigned int mode)
+void APIENTRY
+glutInitWindowPosition (int x, int y)
 {
- g_display_mode = mode;
+   _glut_default.x = x;
+   _glut_default.y = y;
 }
 
 
+void APIENTRY
+glutInitWindowSize (int width, int height)
+{
+   _glut_default.width = width;
+   _glut_default.height = height;
+}
 
-void APIENTRY glutInitWindowPosition (int x, int y)
+
+void APIENTRY
+glutInitDisplayString (const char *string)
 {
- g_init_x = x;
- g_init_y = y;
+   init_string = _glut_strdup(string);
 }
 
 
+void APIENTRY
+glutSetOption (GLenum pname, int value)
+{
+   switch (pname) {
+      case GLUT_INIT_WINDOW_X:
+         _glut_default.x = value;
+         break;
+      case GLUT_INIT_WINDOW_Y:
+         _glut_default.y = value;
+         break;
+   }
+}
+
 
-void APIENTRY glutInitWindowSize (int width, int height)
+void APIENTRY
+glutForceJoystickFunc (void)
 {
- g_init_w = width;
- g_init_h = height;
 }
 
 
+void APIENTRY
+glutIgnoreKeyRepeat (int ignore)
+{
+}
+
+
+void APIENTRY
+glutSetKeyRepeat (int repeatMode)
+{
+}
+
+
+void APIENTRY
+glutVideoPan (int x, int y, int w, int h)
+{
+}
+
 
-void APIENTRY glutMainLoop (void)
+int APIENTRY
+glutVideoResizeGet( GLenum eWhat )
 {
- GLboolean idle;
- static int old_mouse_x = 0;
- static int old_mouse_y = 0;
- static int old_mouse_b = 0;
+   return 0;
+}
 
- {
-  GLint screen_size[2];
-  DMesaGetIntegerv(DMESA_GET_SCREEN_SIZE, screen_size);
-  g_screen_w = screen_size[0];
-  g_screen_h = screen_size[1];
-  DMesaGetIntegerv(DMESA_GET_DRIVER_CAPS, &g_driver_caps);
- }
 
- pc_install_keyb();
- __glutInitMouse();
+void APIENTRY
+glutSetupVideoResizing (void)
+{
+}
 
- glutPostRedisplay();
- if (g_curwin->reshape) {
-    g_curwin->reshape(g_curwin->width, g_curwin->height);
- }
- if (g_curwin->visibility) {
-    g_curwin->visibility(GLUT_VISIBLE);
- }
 
- while (GL_TRUE) {
-       idle = GL_TRUE;
+void APIENTRY
+glutStopVideoResizing (void)
+{
+}
 
-       if (g_redisplay && g_curwin->display) {
-          idle        = GL_FALSE;
-          g_redisplay = GL_FALSE;
-
-          if (g_curwin->show_mouse && !(g_display_mode & GLUT_DOUBLE)) {
-             /* XXX scare mouse */
-             g_curwin->display();
-             /* XXX unscare mouse */
-          } else {
-             g_curwin->display();
-          }
-       }
-
-       if (g_mouse) {
-          int mouse_x;
-          int mouse_y;
-          int mouse_z;
-          int mouse_b;
-
-          /* query mouse */
-          mouse_b = pc_query_mouse(&mouse_x, &mouse_y, &mouse_z);
-
-          /* relative to window coordinates */
-          g_mouse_x = mouse_x - g_curwin->xpos;
-          g_mouse_y = mouse_y - g_curwin->ypos;
-
-          /* mouse was moved? */
-          if ((mouse_x != old_mouse_x) || (mouse_y != old_mouse_y)) {
-             idle        = GL_FALSE;
-             old_mouse_x = mouse_x;
-             old_mouse_y = mouse_y;
-
-             if (mouse_b) {
-                /* any button pressed */
-                if (g_curwin->motion) {
-                   g_curwin->motion(g_mouse_x, g_mouse_y);
-                }
-             } else {
-                /* no button pressed */
-                if (g_curwin->passive) {
-                   g_curwin->passive(g_mouse_x, g_mouse_y);
-                }
-             }
-          }
-
-          /* button state changed? */
-          if (mouse_b != old_mouse_b) {
-             GLUTmouseCB mouse_func;
-
-             if ((mouse_func = g_curwin->mouse)) {
-                if ((old_mouse_b & 1) && !(mouse_b & 1))
-                   mouse_func(GLUT_LEFT_BUTTON, GLUT_UP,     g_mouse_x, g_mouse_y);
-                else if (!(old_mouse_b & 1) && (mouse_b & 1))
-                   mouse_func(GLUT_LEFT_BUTTON, GLUT_DOWN,   g_mouse_x, g_mouse_y);
-
-                if ((old_mouse_b & 2) && !(mouse_b & 2))
-                   mouse_func(GLUT_RIGHT_BUTTON, GLUT_UP,    g_mouse_x, g_mouse_y);
-                else if (!(old_mouse_b & 2) && (mouse_b & 2))
-                   mouse_func(GLUT_RIGHT_BUTTON, GLUT_DOWN,  g_mouse_x, g_mouse_y);
-
-                if ((old_mouse_b & 4) && !(mouse_b & 4))
-                   mouse_func(GLUT_MIDDLE_BUTTON, GLUT_UP,   g_mouse_x, g_mouse_y);
-                else if (!(old_mouse_b & 3) && (mouse_b & 4))
-                   mouse_func(GLUT_MIDDLE_BUTTON, GLUT_DOWN, g_mouse_x, g_mouse_y);
-             }
-
-             idle        = GL_FALSE;
-             old_mouse_b = mouse_b;
-          }
-       }
-
-       if (pc_keypressed()) {
-          int key;
-          int glut_key;
-
-          idle = GL_FALSE;
-          key  = pc_readkey();
-
-          switch (key>>16) {
-                 case KEY_F1:     glut_key = GLUT_KEY_F1;        goto special;
-                 case KEY_F2:     glut_key = GLUT_KEY_F2;        goto special;
-                 case KEY_F3:     glut_key = GLUT_KEY_F3;        goto special;
-                 case KEY_F4:     glut_key = GLUT_KEY_F4;        goto special;
-                 case KEY_F5:     glut_key = GLUT_KEY_F5;        goto special;
-                 case KEY_F6:     glut_key = GLUT_KEY_F6;        goto special;
-                 case KEY_F7:     glut_key = GLUT_KEY_F7;        goto special;
-                 case KEY_F8:     glut_key = GLUT_KEY_F8;        goto special;
-                 case KEY_F9:     glut_key = GLUT_KEY_F9;        goto special;
-                 case KEY_F10:    glut_key = GLUT_KEY_F10;       goto special;
-                 case KEY_F11:    glut_key = GLUT_KEY_F11;       goto special;
-                 case KEY_F12:    glut_key = GLUT_KEY_F12;       goto special;
-                 case KEY_LEFT:   glut_key = GLUT_KEY_LEFT;      goto special;
-                 case KEY_UP:     glut_key = GLUT_KEY_UP;        goto special;
-                 case KEY_RIGHT:  glut_key = GLUT_KEY_RIGHT;     goto special;
-                 case KEY_DOWN:   glut_key = GLUT_KEY_DOWN;      goto special;
-                 case KEY_PGUP:   glut_key = GLUT_KEY_PAGE_UP;   goto special;
-                 case KEY_PGDN:   glut_key = GLUT_KEY_PAGE_DOWN; goto special;
-                 case KEY_HOME:   glut_key = GLUT_KEY_HOME;      goto special;
-                 case KEY_END:    glut_key = GLUT_KEY_END;       goto special;
-                 case KEY_INSERT: glut_key = GLUT_KEY_INSERT;    goto special;
-                 special:
-                      if (g_curwin->special) {
-                         g_curwin->special(glut_key, g_mouse_x, g_mouse_y);
-                      }
-                      break;
-                 default:
-                      if (g_curwin->keyboard) {
-                         g_curwin->keyboard(key & 0xFF, g_mouse_x, g_mouse_y);
-                      }
-          }
-       }
-
-       if (idle && g_idle_func)
-          g_idle_func();
- }
+
+void APIENTRY
+glutVideoResize (int x, int y, int w, int h)
+{
 }