http://www.archive.org/download/tucows_10294_XScreenSaver/xscreensaver-4.10.tar.gz
[xscreensaver] / hacks / speedmine.c
index 64f8578a5ae27e9119e3d6206ead53e56cd5dc85..175e1a538c4d6a14c2d891395b3352386e0baf8f 100644 (file)
@@ -116,6 +116,11 @@ static double step=0.0;
 #define BACKWARDS -1
 static int direction = FORWARDS;
 
+/* Apparently AIX's math.h bogusly defines `nearest' as a function,
+   in violation of the ANSI C spec. */
+#undef nearest
+#define nearest n3arest
+
 static int pindex=0, nearest=0;
 static int flipped_at=0;
 static int xoffset=0, yoffset=0;
@@ -272,9 +277,14 @@ perspective (void)
                zfactor = (double)depth* (12.0 - TERRAIN_LENGTH/8.0) * zf;
                for (j=0; j < TERRAIN_BREADTH; j++) {
                        jj = direction * j; MODULO(jj, TERRAIN_BREADTH);
-                       xx = (worldx[i][jj]-(vertigo*xcc))/zfactor; 
-                       yy = (worldy[i][j]-(vertigo*ycc))/zfactor;
-
+            /* jwz: not totally sure if this is right, but it avoids div0 */
+            if (zfactor != 0) {
+                xx = (worldx[i][jj]-(vertigo*xcc))/zfactor;
+                yy = (worldy[i][j]-(vertigo*ycc))/zfactor;
+            } else {
+                xx = 0;
+                yy = 0;
+            }
                        r = rotation_bias + (int)(vertigo*zcc); MODULO(r, ROTS);
 
                        xvals[t][j] = xoffset + width/2 +