Rename. "fcb" = fortran call back
authorBrian <brian.paul@tungstengraphics.com>
Wed, 12 Sep 2007 19:37:10 +0000 (13:37 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Wed, 12 Sep 2007 19:37:10 +0000 (13:37 -0600)
src/glut/glx/glut_fcb.c [new file with mode: 0644]

diff --git a/src/glut/glx/glut_fcb.c b/src/glut/glx/glut_fcb.c
new file mode 100644 (file)
index 0000000..e93188b
--- /dev/null
@@ -0,0 +1,164 @@
+
+/* Copyright (c) Mark J. Kilgard, 1998.  */
+
+/* This program is freely distributable without licensing fees
+   and is provided without guarantee or warrantee expressed or
+   implied. This program is -not- in the public domain. */
+
+/* I appreciate the guidance from William Mitchell
+   (mitchell@cam.nist.gov) in developing this friend interface
+   for use by the f90gl package.  See ../../README.fortran */
+
+#include "glutint.h"
+
+/* FCB stands for Fortran CallBack. */
+
+/* There is only one idleFunc, menuStateFunc, and menuStatusFunc, so they
+   can be saved in the wrappers for Fortran rather than the C structures. */
+
+/* Set a Fortran callback function. */
+
+void APIENTRY
+__glutSetFCB(int which, void *func)
+{
+#ifdef SUPPORT_FORTRAN
+  switch (which) {
+  case GLUT_FCB_DISPLAY:
+    __glutCurrentWindow->fdisplay = (GLUTdisplayFCB) func;
+    break;
+  case GLUT_FCB_RESHAPE:
+    __glutCurrentWindow->freshape = (GLUTreshapeFCB) func;
+    break;
+  case GLUT_FCB_MOUSE:
+    __glutCurrentWindow->fmouse = (GLUTmouseFCB) func;
+    break;
+  case GLUT_FCB_MOTION:
+    __glutCurrentWindow->fmotion = (GLUTmotionFCB) func;
+    break;
+  case GLUT_FCB_PASSIVE:
+    __glutCurrentWindow->fpassive = (GLUTpassiveFCB) func;
+    break;
+  case GLUT_FCB_ENTRY:
+    __glutCurrentWindow->fentry = (GLUTentryFCB) func;
+    break;
+  case GLUT_FCB_KEYBOARD:
+    __glutCurrentWindow->fkeyboard = (GLUTkeyboardFCB) func;
+    break;
+  case GLUT_FCB_KEYBOARD_UP:
+    __glutCurrentWindow->fkeyboardUp = (GLUTkeyboardFCB) func;
+    break;
+  case GLUT_FCB_WINDOW_STATUS:
+    __glutCurrentWindow->fwindowStatus = (GLUTwindowStatusFCB) func;
+    break;
+  case GLUT_FCB_VISIBILITY:
+    __glutCurrentWindow->fvisibility = (GLUTvisibilityFCB) func;
+    break;
+  case GLUT_FCB_SPECIAL:
+    __glutCurrentWindow->fspecial = (GLUTspecialFCB) func;
+    break;
+  case GLUT_FCB_SPECIAL_UP:
+    __glutCurrentWindow->fspecialUp = (GLUTspecialFCB) func;
+    break;
+  case GLUT_FCB_BUTTON_BOX:
+    __glutCurrentWindow->fbuttonBox = (GLUTbuttonBoxFCB) func;
+    break;
+  case GLUT_FCB_DIALS:
+    __glutCurrentWindow->fdials = (GLUTdialsFCB) func;
+    break;
+  case GLUT_FCB_SPACE_MOTION:
+    __glutCurrentWindow->fspaceMotion = (GLUTspaceMotionFCB) func;
+    break;
+  case GLUT_FCB_SPACE_ROTATE:
+    __glutCurrentWindow->fspaceRotate = (GLUTspaceRotateFCB) func;
+    break;
+  case GLUT_FCB_SPACE_BUTTON:
+    __glutCurrentWindow->fspaceButton = (GLUTspaceButtonFCB) func;
+    break;
+  case GLUT_FCB_TABLET_MOTION:
+    __glutCurrentWindow->ftabletMotion = (GLUTtabletMotionFCB) func;
+    break;
+  case GLUT_FCB_TABLET_BUTTON:
+    __glutCurrentWindow->ftabletButton = (GLUTtabletButtonFCB) func;
+    break;
+#ifdef _WIN32
+  case GLUT_FCB_JOYSTICK:
+    __glutCurrentWindow->fjoystick = (GLUTjoystickFCB) func;
+    break;
+#endif
+  case GLUT_FCB_OVERLAY_DISPLAY:
+    __glutCurrentWindow->overlay->fdisplay = (GLUTdisplayFCB) func;
+    break;
+  case GLUT_FCB_SELECT:
+    __glutCurrentMenu->fselect = (GLUTselectFCB) func;
+    break;
+  case GLUT_FCB_TIMER:
+    __glutNewTimer->ffunc = (GLUTtimerFCB) func;
+    break;
+  }
+#endif
+}
+
+/* Get a Fortran callback function. */
+
+void* APIENTRY
+__glutGetFCB(int which)
+{
+#ifdef SUPPORT_FORTRAN
+  switch (which) {
+  case GLUT_FCB_DISPLAY:
+    return (void *) __glutCurrentWindow->fdisplay;
+  case GLUT_FCB_RESHAPE:
+    return (void *) __glutCurrentWindow->freshape;
+  case GLUT_FCB_MOUSE:
+    return (void *) __glutCurrentWindow->fmouse;
+  case GLUT_FCB_MOTION:
+    return (void *) __glutCurrentWindow->fmotion;
+  case GLUT_FCB_PASSIVE:
+    return (void *) __glutCurrentWindow->fpassive;
+  case GLUT_FCB_ENTRY:
+    return (void *) __glutCurrentWindow->fentry;
+  case GLUT_FCB_KEYBOARD:
+    return (void *) __glutCurrentWindow->fkeyboard;
+  case GLUT_FCB_KEYBOARD_UP:
+    return (void *) __glutCurrentWindow->fkeyboardUp;
+  case GLUT_FCB_WINDOW_STATUS:
+    return (void *) __glutCurrentWindow->fwindowStatus;
+  case GLUT_FCB_VISIBILITY:
+    return (void *) __glutCurrentWindow->fvisibility;
+  case GLUT_FCB_SPECIAL:
+    return (void *) __glutCurrentWindow->fspecial;
+  case GLUT_FCB_SPECIAL_UP:
+    return (void *) __glutCurrentWindow->fspecialUp;
+  case GLUT_FCB_BUTTON_BOX:
+    return (void *) __glutCurrentWindow->fbuttonBox;
+  case GLUT_FCB_DIALS:
+    return (void *) __glutCurrentWindow->fdials;
+  case GLUT_FCB_SPACE_MOTION:
+    return (void *) __glutCurrentWindow->fspaceMotion;
+  case GLUT_FCB_SPACE_ROTATE:
+    return (void *) __glutCurrentWindow->fspaceRotate;
+  case GLUT_FCB_SPACE_BUTTON:
+    return (void *) __glutCurrentWindow->fspaceButton;
+  case GLUT_FCB_TABLET_MOTION:
+    return (void *) __glutCurrentWindow->ftabletMotion;
+  case GLUT_FCB_TABLET_BUTTON:
+    return (void *) __glutCurrentWindow->ftabletButton;
+  case GLUT_FCB_JOYSTICK:
+#ifdef _WIN32
+    return (void *) __glutCurrentWindow->fjoystick;
+#else
+    return NULL;
+#endif
+  case GLUT_FCB_OVERLAY_DISPLAY:
+    return (void *) __glutCurrentWindow->overlay->fdisplay;
+  case GLUT_FCB_SELECT:
+    return (void *) __glutCurrentMenu->fselect;
+  case GLUT_FCB_TIMER:
+    return (void *) __glutTimerList->ffunc;
+  default:
+    return NULL;
+  }
+#else
+  return NULL;
+#endif
+}