From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / glx / hypertorus.c
index 1669707d3eba7dcd9f5af649bc5ec750211b51ba..7e1cc3e7651839b2fbefb45f6ae3ce64ee57257d 100644 (file)
@@ -4,7 +4,7 @@
 static const char sccsid[] = "@(#)hypertorus.c  1.2 05/09/28 xlockmore";
 #endif
 
-/* Copyright (c) 2003-2007 Carsten Steger <carsten@mirsanmir.org>. */
+/* Copyright (c) 2003-2009 Carsten Steger <carsten@mirsanmir.org>. */
 
 /*
  * Permission to use, copy, modify, and distribute this software and its
@@ -24,6 +24,7 @@ static const char sccsid[] = "@(#)hypertorus.c  1.2 05/09/28 xlockmore";
  * C. Steger - 05/09/28: Added the spirals appearance mode
  *                       and trackball support
  * C. Steger - 07/01/23: Improved 4d trackball support
+ * C. Steger - 09/08/22: Removed check-config.pl warnings
  */
 
 /*
@@ -55,74 +56,41 @@ static const char sccsid[] = "@(#)hypertorus.c  1.2 05/09/28 xlockmore";
 #endif
 
 #define DISP_WIREFRAME             0
-#define DISP_WIREFRAME_STR        "0"
 #define DISP_SURFACE               1
-#define DISP_SURFACE_STR          "1"
 #define DISP_TRANSPARENT           2
-#define DISP_TRANSPARENT_STR      "2"
 
 #define APPEARANCE_SOLID           0
-#define APPEARANCE_SOLID_STR      "0"
 #define APPEARANCE_BANDS           1
-#define APPEARANCE_BANDS_STR      "1"
 #define APPEARANCE_SPIRALS         2
-#define APPEARANCE_SPIRALS_STR    "2"
-#define APPEARANCE_SPIRALS_1       3
-#define APPEARANCE_SPIRALS_1_STR  "3"
-#define APPEARANCE_SPIRALS_2       4
-#define APPEARANCE_SPIRALS_2_STR  "4"
-#define APPEARANCE_SPIRALS_4       5
-#define APPEARANCE_SPIRALS_4_STR  "5"
-#define APPEARANCE_SPIRALS_8       6
-#define APPEARANCE_SPIRALS_8_STR  "6"
-#define APPEARANCE_SPIRALS_16      7
-#define APPEARANCE_SPIRALS_16_STR "7"
 
 #define COLORS_TWOSIDED            0
-#define COLORS_TWOSIDED_STR       "0"
 #define COLORS_COLORWHEEL          1
-#define COLORS_COLORWHEEL_STR     "1"
 
 #define DISP_3D_PERSPECTIVE        0
-#define DISP_3D_PERSPECTIVE_STR   "0"
 #define DISP_3D_ORTHOGRAPHIC       1
-#define DISP_3D_ORTHOGRAPHIC_STR  "1"
 
 #define DISP_4D_PERSPECTIVE        0
-#define DISP_4D_PERSPECTIVE_STR   "0"
 #define DISP_4D_ORTHOGRAPHIC       1
-#define DISP_4D_ORTHOGRAPHIC_STR  "1"
-
-#define DALPHA                     1.1
-#define DALPHA_STR                "1.1"
-#define DBETA                      1.3
-#define DBETA_STR                 "1.3"
-#define DDELTA                     1.5
-#define DDELTA_STR                "1.5"
-#define DZETA                      1.7
-#define DZETA_STR                 "1.7"
-#define DETA                       1.9
-#define DETA_STR                  "1.9"
-#define DTHETA                     2.1
-#define DTHETA_STR                "2.1"
-
-#define DEF_DISPLAY_MODE           DISP_TRANSPARENT_STR
-#define DEF_APPEARANCE             APPEARANCE_BANDS_STR
-#define DEF_COLORS                 COLORS_COLORWHEEL_STR
-#define DEF_3D_PROJECTION          DISP_3D_PERSPECTIVE_STR
-#define DEF_4D_PROJECTION          DISP_4D_PERSPECTIVE_STR
-#define DEF_DALPHA                 DALPHA_STR
-#define DEF_DBETA                  DBETA_STR
-#define DEF_DDELTA                 DDELTA_STR
-#define DEF_DZETA                  DZETA_STR
-#define DEF_DETA                   DETA_STR
-#define DEF_DTHETA                 DTHETA_STR
+
+#define DEF_DISPLAY_MODE           "surface"
+#define DEF_APPEARANCE             "bands"
+#define DEF_COLORS                 "colorwheel"
+#define DEF_PROJECTION_3D          "perspective"
+#define DEF_PROJECTION_4D          "perspective"
+#define DEF_SPEEDWX                "1.1"
+#define DEF_SPEEDWY                "1.3"
+#define DEF_SPEEDWZ                "1.5"
+#define DEF_SPEEDXY                "1.7"
+#define DEF_SPEEDXZ                "1.9"
+#define DEF_SPEEDYZ                "2.1"
 
 #ifdef STANDALONE
 # define DEFAULTS           "*delay:      25000 \n" \
                             "*showFPS:    False \n" \
+                           "*suppressRotationAnimation: True\n" \
 
 # define refresh_hypertorus 0
+# define release_hypertorus 0
 # include "xlockmore.h"         /* from the xscreensaver distribution */
 #else  /* !STANDALONE */
 # include "xlock.h"             /* from the xlockmore distribution */
@@ -130,14 +98,12 @@ static const char sccsid[] = "@(#)hypertorus.c  1.2 05/09/28 xlockmore";
 
 #ifdef USE_GL
 
-#include <X11/keysym.h>
-
 #include "gltrackball.h"
 
 
 #ifdef USE_MODULES
 ModStruct   hypertorus_description =
-{"hypertorus", "init_hypertorus", "draw_hypertorus", "release_hypertorus",
+{"hypertorus", "init_hypertorus", "draw_hypertorus", NULL,
  "draw_hypertorus", "change_hypertorus", NULL, &hypertorus_opts,
  25000, 1, 1, 1, 1.0, 4, "",
  "Shows a hypertorus rotating in 4d", 0, NULL};
@@ -145,11 +111,16 @@ ModStruct   hypertorus_description =
 #endif
 
 
+static char *mode;
 static int display_mode;
+static char *appear;
 static int appearance;
 static int num_spirals;
+static char *color_mode;
 static int colors;
+static char *proj_3d;
 static int projection_3d;
+static char *proj_4d;
 static int projection_4d;
 static float speed_wx;
 static float speed_wy;
@@ -164,73 +135,45 @@ static const float offset3d[4] = {  0.0,  0.0, -2.0,  0.0 };
 
 static XrmOptionDescRec opts[] =
 {
-  {"-mode",            ".hypertorus.displayMode",  XrmoptionSepArg, 0 },
-  {"-wireframe",       ".hypertorus.displayMode",  XrmoptionNoArg,
-                       DISP_WIREFRAME_STR },
-  {"-surface",         ".hypertorus.displayMode",  XrmoptionNoArg,
-                       DISP_SURFACE_STR },
-  {"-transparent",     ".hypertorus.displayMode",  XrmoptionNoArg,
-                       DISP_TRANSPARENT_STR },
-
-  {"-appearance",      ".hypertorus.appearance",   XrmoptionSepArg, 0 },
-  {"-solid",           ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_SOLID_STR },
-  {"-bands",           ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_BANDS_STR },
-  {"-spirals-1",       ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_SPIRALS_1_STR },
-  {"-spirals-2",       ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_SPIRALS_2_STR },
-  {"-spirals-4",       ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_SPIRALS_4_STR },
-  {"-spirals-8",       ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_SPIRALS_8_STR },
-  {"-spirals-16",      ".hypertorus.appearance",   XrmoptionNoArg,
-                       APPEARANCE_SPIRALS_16_STR },
-  {"-twosided",        ".hypertorus.colors",       XrmoptionNoArg,
-                       COLORS_TWOSIDED_STR },
-  {"-colorwheel",      ".hypertorus.colors",       XrmoptionNoArg,
-                       COLORS_COLORWHEEL_STR },
-  {"-perspective-3d",  ".hypertorus.projection3d", XrmoptionNoArg,
-                       DISP_3D_PERSPECTIVE_STR },
-  {"-orthographic-3d", ".hypertorus.projection3d", XrmoptionNoArg,
-                       DISP_3D_ORTHOGRAPHIC_STR },
-  {"-perspective-4d",  ".hypertorus.projection4d", XrmoptionNoArg,
-                       DISP_4D_PERSPECTIVE_STR },
-  {"-orthographic-4d", ".hypertorus.projection4d", XrmoptionNoArg,
-                       DISP_4D_ORTHOGRAPHIC_STR },
-  {"-speed-wx",        ".hypertorus.speedwx",      XrmoptionSepArg, 0 },
-  {"-speed-wy",        ".hypertorus.speedwy",      XrmoptionSepArg, 0 },
-  {"-speed-wz",        ".hypertorus.speedwz",      XrmoptionSepArg, 0 },
-  {"-speed-xy",        ".hypertorus.speedxy",      XrmoptionSepArg, 0 },
-  {"-speed-xz",        ".hypertorus.speedxz",      XrmoptionSepArg, 0 },
-  {"-speed-yz",        ".hypertorus.speedyz",      XrmoptionSepArg, 0 }
+  {"-mode",            ".displayMode",  XrmoptionSepArg, 0 },
+  {"-wireframe",       ".displayMode",  XrmoptionNoArg,  "wireframe" },
+  {"-surface",         ".displayMode",  XrmoptionNoArg,  "surface" },
+  {"-transparent",     ".displayMode",  XrmoptionNoArg,  "transparent" },
+  {"-appearance",      ".appearance",   XrmoptionSepArg, 0 },
+  {"-solid",           ".appearance",   XrmoptionNoArg,  "solid" },
+  {"-bands",           ".appearance",   XrmoptionNoArg,  "bands" },
+  {"-spirals-1",       ".appearance",   XrmoptionNoArg,  "spirals-1" },
+  {"-spirals-2",       ".appearance",   XrmoptionNoArg,  "spirals-2" },
+  {"-spirals-4",       ".appearance",   XrmoptionNoArg,  "spirals-4" },
+  {"-spirals-8",       ".appearance",   XrmoptionNoArg,  "spirals-8" },
+  {"-spirals-16",      ".appearance",   XrmoptionNoArg,  "spirals-16" },
+  {"-twosided",        ".colors",       XrmoptionNoArg,  "twosided" },
+  {"-colorwheel",      ".colors",       XrmoptionNoArg,  "colorwheel" },
+  {"-perspective-3d",  ".projection3d", XrmoptionNoArg,  "perspective" },
+  {"-orthographic-3d", ".projection3d", XrmoptionNoArg,  "orthographic" },
+  {"-perspective-4d",  ".projection4d", XrmoptionNoArg,  "perspective" },
+  {"-orthographic-4d", ".projection4d", XrmoptionNoArg,  "orthographic" },
+  {"-speed-wx",        ".speedwx",      XrmoptionSepArg, 0 },
+  {"-speed-wy",        ".speedwy",      XrmoptionSepArg, 0 },
+  {"-speed-wz",        ".speedwz",      XrmoptionSepArg, 0 },
+  {"-speed-xy",        ".speedxy",      XrmoptionSepArg, 0 },
+  {"-speed-xz",        ".speedxz",      XrmoptionSepArg, 0 },
+  {"-speed-yz",        ".speedyz",      XrmoptionSepArg, 0 }
 };
 
 static argtype vars[] =
 {
-  { &display_mode,  "displayMode",  "DisplayMode",
-    DEF_DISPLAY_MODE,  t_Int },
-  { &appearance,    "appearance",   "Appearance",
-    DEF_APPEARANCE,    t_Int },
-  { &colors,        "colors",       "Colors",
-    DEF_COLORS,        t_Int },
-  { &projection_3d, "projection3d", "Projection3d",
-    DEF_3D_PROJECTION, t_Int },
-  { &projection_4d, "projection4d", "Projection4d",
-    DEF_4D_PROJECTION, t_Int },
-  { &speed_wx,      "speedwx",      "Speedwx",
-    DEF_DALPHA,        t_Float},
-  { &speed_wy,      "speedwy",      "Speedwy",
-    DEF_DBETA,         t_Float},
-  { &speed_wz,      "speedwz",      "Speedwz",
-    DEF_DDELTA,        t_Float},
-  { &speed_xy,      "speedxy",      "Speedxy",
-    DEF_DZETA,         t_Float},
-  { &speed_xz,      "speedxz",      "Speedxz",
-    DEF_DETA,          t_Float},
-  { &speed_yz,      "speedyz",      "Speedyz",
-    DEF_DTHETA,        t_Float}
+  { &mode,       "displayMode",  "DisplayMode",  DEF_DISPLAY_MODE,  t_String },
+  { &appear,     "appearance",   "Appearance",   DEF_APPEARANCE,    t_String },
+  { &color_mode, "colors",       "Colors",       DEF_COLORS,        t_String },
+  { &proj_3d,    "projection3d", "Projection3d", DEF_PROJECTION_3D, t_String },
+  { &proj_4d,    "projection4d", "Projection4d", DEF_PROJECTION_4D, t_String },
+  { &speed_wx,   "speedwx",      "Speedwx",      DEF_SPEEDWX,       t_Float},
+  { &speed_wy,   "speedwy",      "Speedwy",      DEF_SPEEDWY,       t_Float},
+  { &speed_wz,   "speedwz",      "Speedwz",      DEF_SPEEDWZ,       t_Float},
+  { &speed_xy,   "speedxy",      "Speedxy",      DEF_SPEEDXY,       t_Float},
+  { &speed_xz,   "speedxz",      "Speedxz",      DEF_SPEEDXZ,       t_Float},
+  { &speed_yz,   "speedyz",      "Speedyz",      DEF_SPEEDYZ,       t_Float}
 };
 
 static OptionStruct desc[] =
@@ -521,9 +464,10 @@ static void color(double angle)
    will only work correctly if numu and numv are set to 64 or any higher
    power of 2.  Similarly, the banded appearance will only work correctly
    if numu and numv are divisible by 4. */
-static void hypertorus(ModeInfo *mi, double umin, double umax, double vmin,
+static int hypertorus(ModeInfo *mi, double umin, double umax, double vmin,
                        double vmax, int numu, int numv)
 {
+  int polys = 0;
   static const GLfloat mat_diff_red[]         = { 1.0, 0.0, 0.0, 1.0 };
   static const GLfloat mat_diff_green[]       = { 0.0, 1.0, 0.0, 1.0 };
   static const GLfloat mat_diff_trans_red[]   = { 1.0, 0.0, 0.0, 0.7 };
@@ -560,6 +504,17 @@ static void hypertorus(ModeInfo *mi, double umin, double umax, double vmin,
     }
   }
 
+#if 0 /* #### not working */
+# ifdef HAVE_MOBILE    /* Keep it the same relative size when rotated. */
+  {
+    GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi);
+    int o = (int) current_device_rotation();
+    if (o != 0 && o != 180 && o != -180)
+      glScalef (1/h, 1/h, 1/h);
+  }
+# endif
+#endif
+
   skew = num_spirals;
   ur = umax-umin;
   vr = vmax-vmin;
@@ -651,10 +606,13 @@ static void hypertorus(ModeInfo *mi, double umin, double umax, double vmin,
         n[2] /= t;
         glNormal3fv(n);
         glVertex3fv(p);
+        polys++;
       }
     }
     glEnd();
   }
+  polys /= 2;
+  return polys;
 }
 
 
@@ -667,16 +625,6 @@ static void init(ModeInfo *mi)
   static const GLfloat mat_specular[]   = { 1.0, 1.0, 1.0, 1.0 };
   hypertorusstruct *hp = &hyper[MI_SCREEN(mi)];
 
-  if (appearance >= APPEARANCE_SPIRALS_1)
-  {
-    num_spirals = 1<<(appearance-APPEARANCE_SPIRALS_1);
-    appearance = APPEARANCE_SPIRALS;
-  }
-  else
-  {
-    num_spirals = 0;
-  }
-
   hp->alpha = 0.0;
   hp->beta = 0.0;
   hp->delta = 0.0;
@@ -693,16 +641,12 @@ static void init(ModeInfo *mi)
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
 
+# ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */
   if (display_mode == DISP_WIREFRAME)
-  {
-    glDisable(GL_DEPTH_TEST);
-    glShadeModel(GL_FLAT);
-    glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
-    glDisable(GL_LIGHTING);
-    glDisable(GL_LIGHT0);
-    glDisable(GL_BLEND);
-  }
-  else if (display_mode == DISP_SURFACE)
+    display_mode = DISP_SURFACE;
+# endif
+
+  if (display_mode == DISP_SURFACE)
   {
     glEnable(GL_DEPTH_TEST);
     glDepthFunc(GL_LESS);
@@ -738,7 +682,7 @@ static void init(ModeInfo *mi)
     glEnable(GL_BLEND);
     glBlendFunc(GL_SRC_ALPHA,GL_ONE);
   }
-  else
+  else  /* display_mode == DISP_WIREFRAME */
   {
     glDisable(GL_DEPTH_TEST);
     glShadeModel(GL_FLAT);
@@ -793,7 +737,7 @@ static void display_hypertorus(ModeInfo *mi)
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
 
-  hypertorus(mi,0.0,2.0*M_PI,0.0,2.0*M_PI,64,64);
+  mi->polygon_count = hypertorus(mi,0.0,2.0*M_PI,0.0,2.0*M_PI,64,64);
 }
 
 
@@ -810,9 +754,12 @@ ENTRYPOINT void reshape_hypertorus(ModeInfo *mi, int width, int height)
 
 ENTRYPOINT Bool hypertorus_handle_event(ModeInfo *mi, XEvent *event)
 {
-  Display *display = MI_DISPLAY(mi);
   hypertorusstruct *hp = &hyper[MI_SCREEN(mi)];
-  KeySym  sym;
+  KeySym  sym = 0;
+  char c = 0;
+
+  if (event->xany.type == KeyPress || event->xany.type == KeyRelease)
+    XLookupString (&event->xkey, &c, 1, &sym, 0);
 
   if (event->xany.type == ButtonPress &&
       event->xbutton.button == Button1)
@@ -831,7 +778,6 @@ ENTRYPOINT Bool hypertorus_handle_event(ModeInfo *mi, XEvent *event)
   }
   else if (event->xany.type == KeyPress)
   {
-    sym = XKeycodeToKeysym(display,event->xkey.keycode,0);
     if (sym == XK_Shift_L || sym == XK_Shift_R)
     {
       hp->current_trackball = 1;
@@ -844,7 +790,6 @@ ENTRYPOINT Bool hypertorus_handle_event(ModeInfo *mi, XEvent *event)
   }
   else if (event->xany.type == KeyRelease)
   {
-    sym = XKeycodeToKeysym(display,event->xkey.keycode,0);
     if (sym == XK_Shift_L || sym == XK_Shift_R)
     {
       hp->current_trackball = 0;
@@ -885,21 +830,116 @@ ENTRYPOINT void init_hypertorus(ModeInfo *mi)
 {
   hypertorusstruct *hp;
 
-  if (hyper == NULL)
-  {
-    hyper = (hypertorusstruct *)calloc(MI_NUM_SCREENS(mi),
-                                       sizeof(hypertorusstruct));
-    if (hyper == NULL)
-      return;
-  }
+  MI_INIT(mi, hyper, NULL);
   hp = &hyper[MI_SCREEN(mi)];
 
   
-  hp->trackballs[0] = gltrackball_init();
-  hp->trackballs[1] = gltrackball_init();
+  hp->trackballs[0] = gltrackball_init(True);
+  hp->trackballs[1] = gltrackball_init(True);
   hp->current_trackball = 0;
   hp->button_pressed = False;
 
+  /* Set the display mode. */
+  if (!strcasecmp(mode,"wireframe") || !strcasecmp(mode,"0"))
+  {
+    display_mode = DISP_WIREFRAME;
+  }
+  else if (!strcasecmp(mode,"surface") || !strcasecmp(mode,"1"))
+  {
+    display_mode = DISP_SURFACE;
+  }
+  else if (!strcasecmp(mode,"transparent") || !strcasecmp(mode,"2"))
+  {
+    display_mode = DISP_TRANSPARENT;
+  }
+  else
+  {
+    display_mode = DISP_SURFACE;
+  }
+
+  /* Set the appearance. */
+  if (!strcasecmp(appear,"solid") || !strcasecmp(appear,"0"))
+  {
+    appearance = APPEARANCE_SOLID;
+  }
+  else if (!strcasecmp(appear,"bands") || !strcasecmp(appear,"1"))
+  {
+    appearance = APPEARANCE_BANDS;
+    num_spirals = 0;
+  }
+  else if (!strcasecmp(appear,"spirals-1") || !strcasecmp(appear,"3"))
+  {
+    appearance = APPEARANCE_SPIRALS;
+    num_spirals = 1;
+  }
+  else if (!strcasecmp(appear,"spirals-2") || !strcasecmp(appear,"4"))
+  {
+    appearance = APPEARANCE_SPIRALS;
+    num_spirals = 2;
+  }
+  else if (!strcasecmp(appear,"spirals-4") || !strcasecmp(appear,"5"))
+  {
+    appearance = APPEARANCE_SPIRALS;
+    num_spirals = 4;
+  }
+  else if (!strcasecmp(appear,"spirals-8") || !strcasecmp(appear,"6"))
+  {
+    appearance = APPEARANCE_SPIRALS;
+    num_spirals = 8;
+  }
+  else if (!strcasecmp(appear,"spirals-16") || !strcasecmp(appear,"7"))
+  {
+    appearance = APPEARANCE_SPIRALS;
+    num_spirals = 16;
+  }
+  else
+  {
+    appearance = APPEARANCE_BANDS;
+    num_spirals = 0;
+  }
+
+  /* Set the color mode. */
+  if (!strcasecmp(color_mode,"twosided"))
+  {
+    colors = COLORS_TWOSIDED;
+  }
+  else if (!strcasecmp(color_mode,"colorwheel"))
+  {
+    colors = COLORS_COLORWHEEL;
+  }
+  else
+  {
+    colors = COLORS_COLORWHEEL;
+  }
+
+  /* Set the 3d projection mode. */
+  if (!strcasecmp(proj_3d,"perspective") || !strcasecmp(proj_3d,"0"))
+  {
+    projection_3d = DISP_3D_PERSPECTIVE;
+  }
+  else if (!strcasecmp(proj_3d,"orthographic") || !strcasecmp(proj_3d,"1"))
+  {
+    projection_3d = DISP_3D_ORTHOGRAPHIC;
+  }
+  else
+  {
+    projection_3d = DISP_3D_PERSPECTIVE;
+  }
+
+  /* Set the 4d projection mode. */
+  if (!strcasecmp(proj_4d,"perspective") || !strcasecmp(proj_4d,"0"))
+  {
+    projection_4d = DISP_4D_PERSPECTIVE;
+  }
+  else if (!strcasecmp(proj_4d,"orthographic") || !strcasecmp(proj_4d,"1"))
+  {
+    projection_4d = DISP_4D_ORTHOGRAPHIC;
+  }
+  else
+  {
+    projection_4d = DISP_4D_PERSPECTIVE;
+  }
+
   /* make multiple screens rotate at slightly different rates. */
   hp->speed_scale = 0.9 + frand(0.3);
 
@@ -950,33 +990,6 @@ ENTRYPOINT void draw_hypertorus(ModeInfo *mi)
 }
 
 
-/*
- *-----------------------------------------------------------------------------
- *    The display is being taken away from us.  Free up malloc'ed 
- *      memory and X resources that we've alloc'ed.  Only called
- *      once, we must zap everything for every screen.
- *-----------------------------------------------------------------------------
- */
-
-ENTRYPOINT void release_hypertorus(ModeInfo *mi)
-{
-  if (hyper != NULL)
-  {
-    int screen;
-
-    for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
-    {
-      hypertorusstruct *hp = &hyper[screen];
-
-      if (hp->glx_context)
-        hp->glx_context = (GLXContext *)NULL;
-    }
-    (void) free((void *)hyper);
-    hyper = (hypertorusstruct *)NULL;
-  }
-  FreeAllGL(mi);
-}
-
 #ifndef STANDALONE
 ENTRYPOINT void change_hypertorus(ModeInfo *mi)
 {