glut_fcb.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:5k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1998.  */
  2. /* This program is freely distributable without licensing fees
  3.    and is provided without guarantee or warrantee expressed or
  4.    implied. This program is -not- in the public domain. */
  5. /* I appreciate the guidance from William Mitchell
  6.    (mitchell@cam.nist.gov) in developing this friend interface
  7.    for use by the f90gl package.  See ../../README.fortran */
  8. #include "glutint.h"
  9. /* FCB stands for Fortran CallBack. */
  10. /* There is only one idleFunc, menuStateFunc, and menuStatusFunc, so they
  11.    can be saved in the wrappers for Fortran rather than the C structures. */
  12. /* Set a Fortran callback function. */
  13. void APIENTRY
  14. __glutSetFCB(int which, void *func)
  15. {
  16. #ifdef SUPPORT_FORTRAN
  17.   switch (which) {
  18.   case GLUT_FCB_DISPLAY:
  19.     __glutCurrentWindow->fdisplay = (GLUTdisplayFCB) func;
  20.     break;
  21.   case GLUT_FCB_RESHAPE:
  22.     __glutCurrentWindow->freshape = (GLUTreshapeFCB) func;
  23.     break;
  24.   case GLUT_FCB_MOUSE:
  25.     __glutCurrentWindow->fmouse = (GLUTmouseFCB) func;
  26.     break;
  27.   case GLUT_FCB_MOTION:
  28.     __glutCurrentWindow->fmotion = (GLUTmotionFCB) func;
  29.     break;
  30.   case GLUT_FCB_PASSIVE:
  31.     __glutCurrentWindow->fpassive = (GLUTpassiveFCB) func;
  32.     break;
  33.   case GLUT_FCB_ENTRY:
  34.     __glutCurrentWindow->fentry = (GLUTentryFCB) func;
  35.     break;
  36.   case GLUT_FCB_KEYBOARD:
  37.     __glutCurrentWindow->fkeyboard = (GLUTkeyboardFCB) func;
  38.     break;
  39.   case GLUT_FCB_KEYBOARD_UP:
  40.     __glutCurrentWindow->fkeyboardUp = (GLUTkeyboardFCB) func;
  41.     break;
  42.   case GLUT_FCB_WINDOW_STATUS:
  43.     __glutCurrentWindow->fwindowStatus = (GLUTwindowStatusFCB) func;
  44.     break;
  45.   case GLUT_FCB_VISIBILITY:
  46.     __glutCurrentWindow->fvisibility = (GLUTvisibilityFCB) func;
  47.     break;
  48.   case GLUT_FCB_SPECIAL:
  49.     __glutCurrentWindow->fspecial = (GLUTspecialFCB) func;
  50.     break;
  51.   case GLUT_FCB_SPECIAL_UP:
  52.     __glutCurrentWindow->fspecialUp = (GLUTspecialFCB) func;
  53.     break;
  54.   case GLUT_FCB_BUTTON_BOX:
  55.     __glutCurrentWindow->fbuttonBox = (GLUTbuttonBoxFCB) func;
  56.     break;
  57.   case GLUT_FCB_DIALS:
  58.     __glutCurrentWindow->fdials = (GLUTdialsFCB) func;
  59.     break;
  60.   case GLUT_FCB_SPACE_MOTION:
  61.     __glutCurrentWindow->fspaceMotion = (GLUTspaceMotionFCB) func;
  62.     break;
  63.   case GLUT_FCB_SPACE_ROTATE:
  64.     __glutCurrentWindow->fspaceRotate = (GLUTspaceRotateFCB) func;
  65.     break;
  66.   case GLUT_FCB_SPACE_BUTTON:
  67.     __glutCurrentWindow->fspaceButton = (GLUTspaceButtonFCB) func;
  68.     break;
  69.   case GLUT_FCB_TABLET_MOTION:
  70.     __glutCurrentWindow->ftabletMotion = (GLUTtabletMotionFCB) func;
  71.     break;
  72.   case GLUT_FCB_TABLET_BUTTON:
  73.     __glutCurrentWindow->ftabletButton = (GLUTtabletButtonFCB) func;
  74.     break;
  75. #ifdef _WIN32
  76.   case GLUT_FCB_JOYSTICK:
  77.     __glutCurrentWindow->fjoystick = (GLUTjoystickFCB) func;
  78.     break;
  79. #endif
  80.   case GLUT_FCB_OVERLAY_DISPLAY:
  81.     __glutCurrentWindow->overlay->fdisplay = (GLUTdisplayFCB) func;
  82.     break;
  83.   case GLUT_FCB_SELECT:
  84.     __glutCurrentMenu->fselect = (GLUTselectFCB) func;
  85.     break;
  86.   case GLUT_FCB_TIMER:
  87.     __glutNewTimer->ffunc = (GLUTtimerFCB) func;
  88.     break;
  89.   }
  90. #endif
  91. }
  92. /* Get a Fortran callback function. */
  93. void* APIENTRY
  94. __glutGetFCB(int which)
  95. {
  96. #ifdef SUPPORT_FORTRAN
  97.   switch (which) {
  98.   case GLUT_FCB_DISPLAY:
  99.     return (void *) __glutCurrentWindow->fdisplay;
  100.   case GLUT_FCB_RESHAPE:
  101.     return (void *) __glutCurrentWindow->freshape;
  102.   case GLUT_FCB_MOUSE:
  103.     return (void *) __glutCurrentWindow->fmouse;
  104.   case GLUT_FCB_MOTION:
  105.     return (void *) __glutCurrentWindow->fmotion;
  106.   case GLUT_FCB_PASSIVE:
  107.     return (void *) __glutCurrentWindow->fpassive;
  108.   case GLUT_FCB_ENTRY:
  109.     return (void *) __glutCurrentWindow->fentry;
  110.   case GLUT_FCB_KEYBOARD:
  111.     return (void *) __glutCurrentWindow->fkeyboard;
  112.   case GLUT_FCB_KEYBOARD_UP:
  113.     return (void *) __glutCurrentWindow->fkeyboardUp;
  114.   case GLUT_FCB_WINDOW_STATUS:
  115.     return (void *) __glutCurrentWindow->fwindowStatus;
  116.   case GLUT_FCB_VISIBILITY:
  117.     return (void *) __glutCurrentWindow->fvisibility;
  118.   case GLUT_FCB_SPECIAL:
  119.     return (void *) __glutCurrentWindow->fspecial;
  120.   case GLUT_FCB_SPECIAL_UP:
  121.     return (void *) __glutCurrentWindow->fspecialUp;
  122.   case GLUT_FCB_BUTTON_BOX:
  123.     return (void *) __glutCurrentWindow->fbuttonBox;
  124.   case GLUT_FCB_DIALS:
  125.     return (void *) __glutCurrentWindow->fdials;
  126.   case GLUT_FCB_SPACE_MOTION:
  127.     return (void *) __glutCurrentWindow->fspaceMotion;
  128.   case GLUT_FCB_SPACE_ROTATE:
  129.     return (void *) __glutCurrentWindow->fspaceRotate;
  130.   case GLUT_FCB_SPACE_BUTTON:
  131.     return (void *) __glutCurrentWindow->fspaceButton;
  132.   case GLUT_FCB_TABLET_MOTION:
  133.     return (void *) __glutCurrentWindow->ftabletMotion;
  134.   case GLUT_FCB_TABLET_BUTTON:
  135.     return (void *) __glutCurrentWindow->ftabletButton;
  136.   case GLUT_FCB_JOYSTICK:
  137. #ifdef _WIN32
  138.     return (void *) __glutCurrentWindow->fjoystick;
  139. #else
  140.     return NULL;
  141. #endif
  142.   case GLUT_FCB_OVERLAY_DISPLAY:
  143.     return (void *) __glutCurrentWindow->overlay->fdisplay;
  144.   case GLUT_FCB_SELECT:
  145.     return (void *) __glutCurrentMenu->fselect;
  146.   case GLUT_FCB_TIMER:
  147.     return (void *) __glutTimerList->ffunc;
  148.   default:
  149.     return NULL;
  150.   }
  151. #else
  152.   return NULL;
  153. #endif
  154. }