- /* 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
- }