]> cvs.zerfleddert.de Git - micropolis/blobdiff - src/sim/g_map.c
src/tclx/ucbsrc/makefile: Micropolis build fixes for recent macOS
[micropolis] / src / sim / g_map.c
index 4b0fe5f6514ca416bb00148813cbc3e24aa0dba2..5a65e00cf5db5ea554e0037bb9a3b62b7657c775 100644 (file)
@@ -83,23 +83,21 @@ short valGrayMap[] = {
 };
 
 
-int (*mapProcs[NMAPS])();
-
-int drawAll(SimView *view);
-int drawRes(SimView *view);
-int drawCom(SimView *view);
-int drawInd(SimView *view);
-int drawPower(SimView *view);
-int drawLilTransMap(SimView *view);
-int drawPopDensity(SimView *view);
-int drawRateOfGrowth(SimView *view);
-int drawTrafMap(SimView *view);
-int drawPolMap(SimView *view);
-int drawCrimeMap(SimView *view);
-int drawLandMap(SimView *view);
-int drawFireRadius(SimView *view);
-int drawPoliceRadius(SimView *view);
-int drawDynamic(SimView *view);
+void (*mapProcs[NMAPS])();
+
+void drawPopDensity(SimView *view);
+void drawRateOfGrowth(SimView *view);
+void drawTrafMap(SimView *view);
+void drawPolMap(SimView *view);
+void drawCrimeMap(SimView *view);
+void drawLandMap(SimView *view);
+void drawFireRadius(SimView *view);
+void drawPoliceRadius(SimView *view);
+void ditherMap(SimView *view);
+void drawRect(SimView *view, int pixel, int solid,
+        int x, int y, int w, int h);
+void maybeDrawRect(SimView *view, int val,
+           int x, int y, int w, int h);
 
 
 short GetCI(short x)
@@ -112,6 +110,7 @@ short GetCI(short x)
 }
 
 
+void
 drawPopDensity(SimView *view)
 {
   short x, y;
@@ -126,6 +125,7 @@ drawPopDensity(SimView *view)
 }
 
 
+void
 drawRateOfGrowth(SimView *view)
 {
   short x, y;
@@ -153,6 +153,7 @@ drawRateOfGrowth(SimView *view)
 }
 
 
+void
 drawTrafMap(SimView *view)
 {
   short x;
@@ -169,6 +170,7 @@ drawTrafMap(SimView *view)
 }
 
 
+void
 drawPolMap(SimView *view)
 {
   short x, y;
@@ -184,6 +186,7 @@ drawPolMap(SimView *view)
 }
 
 
+void
 drawCrimeMap(SimView *view)
 {
   short x, y;
@@ -199,6 +202,7 @@ drawCrimeMap(SimView *view)
 }
 
 
+void
 drawLandMap(SimView *view)
 {
   short x, y;
@@ -214,12 +218,13 @@ drawLandMap(SimView *view)
 }
 
 
+void
 drawFireRadius(SimView *view)
 {
   short x, y;
 
   drawAll(view);
-  for (x = 0; x < SmY; x++) {
+  for (x = 0; x < SmX; x++) {
     for (y = 0; y < SmY; y++) {
       maybeDrawRect(view, GetCI(FireRate[x][y]),
                    x * 24, y * 24, 24, 24);
@@ -228,6 +233,7 @@ drawFireRadius(SimView *view)
 }
 
 
+void
 drawPoliceRadius(SimView *view)
 {
   short x, y;
@@ -242,6 +248,7 @@ drawPoliceRadius(SimView *view)
 }
 
 
+void
 setUpMapProcs(void)
 {
   mapProcs[ALMAP] = drawAll;
@@ -262,6 +269,7 @@ setUpMapProcs(void)
 }
 
 
+void
 MemDrawMap(SimView *view)
 {
   (*mapProcs[view->map_state])(view);
@@ -275,6 +283,7 @@ MemDrawMap(SimView *view)
 }
 
 
+void
 ditherMap(SimView *view)
 {
   int i, x, y, width, height;
@@ -346,6 +355,7 @@ ditherMap(SimView *view)
 }
 
 
+void
 maybeDrawRect(SimView *view, int val,
            int x, int y, int w, int h)
 {
@@ -359,6 +369,7 @@ maybeDrawRect(SimView *view, int val,
 }
 
 
+void
 drawRect(SimView *view, int pixel, int solid,
         int x, int y, int w, int h)
 {
@@ -385,8 +396,10 @@ drawRect(SimView *view, int pixel, int solid,
 
   if (w && h) {
     int i, j, stipple = (x ^ y) & 1;
+#if 0
     unsigned char *data =
       view->x->color ? view->data : view->data8;
+#endif
 
     /* In the case of black and white, we use an 8 bit buffer and dither it. */
     int pixelBytes = 
@@ -394,8 +407,10 @@ drawRect(SimView *view, int pixel, int solid,
     QUAD line = 
       view->x->color ? view->line_bytes : view->line_bytes8;
 
+#if 0
     unsigned char *image =
       &(data[(line * y) + (x * pixelBytes)]);
+#endif
 
     switch (pixelBytes) {
 
@@ -406,25 +421,15 @@ drawRect(SimView *view, int pixel, int solid,
        unsigned char *image = 
          &data[(line * y) + (x * pixelBytes)];
 
-       if (solid) {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
+       for (i = h; i > 0; i--) {
+         for (j = w; j > 0; j--) {
+           if (solid || stipple++ & 1)
              *image = pixel;
-             image++;
-           }
-           image += line - w;
-         }
-       } else {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             if (stipple++ & 1)
-               *image = pixel;
-             image++;
-           }
-           if (!(w & 1))
-             stipple++;
-           image += line - w;
+           image++;
          }
+         if (!(w & 1))
+           stipple++;
+         image += line - w;
        }
       }
       break;
@@ -438,26 +443,22 @@ drawRect(SimView *view, int pixel, int solid,
        image = 
          &data[(line * y) + x];
 
-       if (solid) {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             *image = pixel;
-             image++;
-           }
-           image += line - w;
-         }
-       } else {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             if (stipple++ & 1)
-               *image = pixel;
-             image++;
+       for (i = h; i > 0; i--) {
+         for (j = w; j > 0; j--) {
+           if (solid || stipple++ & 1) {
+             if (view->x->x_big_endian) {
+               *image = ((pixel & 0xff) << 8) | ((pixel & 0xff00) >> 8);
+             } else {
+               *image = pixel;
+             }
            }
-           if (!(w & 1))
-             stipple++;
-           image += line - w;
+           image++;
          }
+         if (!(w & 1))
+           stipple++;
+         image += line - w;
        }
+
       }
       break;
 
@@ -467,41 +468,39 @@ drawRect(SimView *view, int pixel, int solid,
        unsigned char *data = 
          (unsigned char *)view->data;
        unsigned char *image;
-       int bitmapPad = view->x->small_tile_image->bitmap_pad;
-       int rowBytes = view->x->small_tile_image->bytes_per_line;
-       line = rowBytes >> 1; /* Convert from byte offset to short offset */
        image = 
-         &data[(line * y) + x];
+         &data[(line * y) + x * pixelBytes];
 
-       if (solid) {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             *(image++) = (pixel >> 0) & 0xff;
-             *(image++) = (pixel >> 8) & 0xff;
-             *(image++) = (pixel >> 16) & 0xff;
-             if (bitmapPad == 32) {
+       for (i = h; i > 0; i--) {
+         for (j = w; j > 0; j--) {
+           if (view->x->x_big_endian) {
+             if (pixelBytes == 4) {
                image++;
              }
-           }
-           image += line - w;
-         }
-       } else {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             if (stipple++ & 1) {
-               *(image++) = (pixel >> 0) & 0xff;
-               *(image++) = (pixel >> 8) & 0xff;
-               *(image++) = (pixel >> 16) & 0xff;
-               if (bitmapPad == 32) {
-                 image++;
-               }
+             if (solid || stipple++ & 1) {
+               *(image++) = (pixel >> 16) & 0xff;
+               *(image++) = (pixel >> 8) & 0xff;
+               *(image++) = (pixel >> 0) & 0xff;
+             } else {
+               image += 3;
+             }
+           } else {
+             if (solid || stipple++ & 1) {
+               *(image++) = (pixel >> 0) & 0xff;
+               *(image++) = (pixel >> 8) & 0xff;
+               *(image++) = (pixel >> 16) & 0xff;
+             } else {
+               image += 3;
+             }
+             if (pixelBytes == 4) {
+               image++;
              }
            }
-           if (!(w & 1)) {
-             stipple++;
-           }
-           image += line - w;
          }
+         if (!(w & 1)) {
+           stipple++;
+         }
+         image += line - w * pixelBytes;
        }
       }
       break;
Impressum, Datenschutz