head	1.1;
access;
symbols;
locks
	gtoal:1.1; strict;
comment	@# @;


1.1
date	2020.05.29.18.30.51;	author gtoal;	state Exp;
branches;
next	;


desc
@hidden surface removal now works
@


1.1
log
@Initial revision
@
text
@<HTML>
<HEAD>
<TITLE> blockgrid.c </TITLE>
</HEAD>
<BODY bgcolor=ffffff><pre>
<font color=#008000>#include &lt;vectrex.h&gt;</font>

<font color=#408080><i>// WARNING!  This is some pretty horrendous code, and too close examination of</i></font>
<font color=#408080><i>// it may make you go blind.  I've basically enumerated the perspective view from</i></font>
<font color=#408080><i>// each of four quadrants manually.  I have no doubt that this code could be</i></font>
<font color=#408080><i>// greatly simplified, but that is for another day and probably another programmer.</i></font>
<font color=#408080><i>// One in a series of quick &amp; dirty hacks.</i></font>

<font color=#408080><i>// unfortunately I made the sizes of these areas even, i.e. with a block boundary</i></font>
<font color=#408080><i>// running down x==0 and y==0 which requires special cases for various vectors (not</i></font>
<font color=#408080><i>// yet implemented).</i></font>
<font color=#408080><i>//</i></font>
<font color=#408080><i>// If I had chosen an odd-sized playfield there would be blocks running down the</i></font>
<font color=#408080><i>// centers and no ambiguity on viewing the vectors on either side...</i></font>

<font color=#408080><i>// might handle that in a later revision.  Also need to consider scrolling</i></font>
<font color=#408080><i>// by smaller units than a complete block...</i></font>

<font color=#408080><i>// TO DO: take the flicker hit only when changing the view, otherwise replay the</i></font>
<font color=#408080><i>// previously-generated vectors...</i></font>

<font color=#408080><i>// would also be nice to coalesce multiple vectors into a single line...</i></font>

<font color=#408080><i>// Only algorithmic improvement needed: the ground-level vectors sometimes go underneath</i></font>
<font color=#408080><i>// a block, and need to be clipped.  Fortunately the excess length is trivial to calculate -</i></font>
<font color=#408080><i>// it is the same ix&lt;&lt;SHIFT that would be used to draw the diagonal in the adjacent block!</i></font>



<font color=#008000>#define set_scale(s) do { VIA_t1_cnt_lo = (unsigned int)s; } while (0)</font>

<font color=#008000>#ifdef BIGGG</font>
<font color=#008000>#define SIZE 4</font>
<font color=#008000>#define SHIFT 1</font>
<font color=#008000>#define GROUND_SCALE 0x6B</font>
<font color=#008000>#else</font>
<font color=#008000>#ifdef REGULAR</font>
<font color=#008000>#define SIZE 2</font>
<font color=#008000>#define SHIFT 2</font>
<font color=#008000>#define GROUND_SCALE 0x6F</font>
<font color=#008000>#else</font>
<font color=#008000>#define SIZE 2</font>
<font color=#008000>#define SHIFT 3</font>
<font color=#008000>#define GROUND_SCALE 0x5D</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<b>int</b> sq[SIZE*2][SIZE*2];

<b>void</b> Move(<b>int</b> x, <b>int</b> y) {
  Reset0Ref();
  Moveto_d(y, x);
}

<b>void</b> Skip(<b>int</b> dx, <b>int</b> dy) {
  Moveto_d((<b>int</b>)(dy), (<b>int</b>)(dx));
}

<b>void</b> Line(<b>int</b> dx, <b>int</b> dy) {
  Draw_Line_d((<b>int</b>)(dy), (<b>int</b>)(dx));
}

<font color=#008000>#define YH (24*4/SIZE)</font>
<font color=#008000>#define XW (31*4/SIZE)</font>

<font color=#408080><i>// I've enumerated all the cases of the four quadrants, but the special cases of the</i></font>
<font color=#408080><i>// centerlines (x == 0 or y == 0) remain to be handled.</i></font>

<b>void</b> roof(<b>int</b> move) {
  <b>int</b> ix,x;
  <b>int</b> iy,y;
  Intensity_1F();
  set_scale(move);
  <b>for</b> (iy = -SIZE, y = -SIZE*YH; iy &lt; SIZE; y+=YH, iy+=1) { 
    Reset0Ref();
    Skip(-SIZE*XW, y);
    <b>for</b> (ix = -SIZE, x = -SIZE*XW; ix &lt; SIZE; x+=XW, ix+=1) {
      <b>if</b> ((sq[ix+SIZE][iy+SIZE]) || ((iy &gt; -SIZE) &amp;&amp; sq[ix+SIZE][iy+SIZE-1])) {
        <b>if</b> (iy &gt;= 0) {
          <b>if</b> (sq[ix+SIZE][iy+SIZE] != sq[ix+SIZE][iy+SIZE-1]) Line(XW, 0); <b>else</b> Skip(XW, 0);
        } <b>else</b> <b>if</b> (iy &lt; 0) { 
          <b>if</b> (    ((iy == -SIZE) &amp;&amp; sq[ix+SIZE][iy+SIZE])
               || (iy &gt; -SIZE &amp;&amp; !sq[ix+SIZE][iy+SIZE])
               || ((iy &gt; -SIZE) &amp;&amp; sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1])) { 
            Line(XW, 0); <font color=#408080><i>// horizontal line below block</i></font>
          } <b>else</b> Skip(XW, 0);
        } <b>else</b> Skip(XW, 0);
      } <b>else</b> Skip(XW, 0); <font color=#408080><i>// horizontal below block</i></font>

      <b>if</b> (    (!sq[ix+SIZE][iy+SIZE] &amp;&amp; (sq[ix+SIZE+1][iy+SIZE]) &amp;&amp; (ix &lt; SIZE-1)) <font color=#408080><i>// lhs of next</i></font>
           || (sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE+1][iy+SIZE] &amp;&amp; (ix &lt; SIZE-1))
           || (ix == SIZE-1 &amp;&amp; sq[ix+SIZE][iy+SIZE])
         ) {                <font color=#408080><i>// rhs</i></font>
        Line(0, YH+1);
      } <b>else</b> {
        Skip(0, YH+1); <font color=#408080><i>// rhs verticals</i></font>
      }

      <b>if</b> (iy == SIZE-1) {
        <b>if</b> (sq[ix+SIZE][iy+SIZE]) Line(-XW, 0); <b>else</b> Skip(-XW, 0); <font color=#408080><i>// top row horizontals</i></font>
        Skip(XW, 0);
      }
      Skip(0, -YH);
    }
    Reset0Ref();
    Skip(-SIZE*XW, y);
    <b>if</b> (sq[<font color=#408080><i>/*ix+SIZE*/</i></font>0][iy+SIZE]) Line(0, YH<font color=#408080><i>/*-1*/</i></font>); <font color=#408080><i>// leftmost vertical</i></font>
  }
}

<b>void</b> ground(<b>int</b> move) {
  <b>int</b> ix,x;
  <b>int</b> iy,y;
  Intensity_1F();
  set_scale(move);
  <b>for</b> (iy = -SIZE, y = -SIZE*YH; iy &lt; SIZE; y+=YH, iy+=1) { 
    Reset0Ref();
    Skip(-SIZE*XW, y);
    <b>for</b> (ix = -SIZE, x = -SIZE*XW; ix &lt; SIZE; x+=XW, ix+=1) {

      <b>if</b> (iy &gt; 0) {
        <b>if</b> (sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1] ) {
          Line(XW, 0);
        } <b>else</b> Skip(XW, 0);
      } <b>else</b> <b>if</b> (iy &lt; 0) {
        <b>if</b> ((iy &gt; -SIZE) &amp;&amp; sq[ix+SIZE][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE][iy+SIZE] ) {
          Line(XW, 0); <font color=#408080><i>// horizontal line at top of block</i></font>
        } <b>else</b> Skip(XW, 0);
      } <b>else</b> {
        Skip(XW, 0);
      }

      <b>if</b> ((ix &gt;= 0) &amp;&amp; (ix &lt; SIZE-1)) {
        <b>if</b> (!sq[ix+SIZE][iy+SIZE] &amp;&amp; sq[ix+SIZE+1][iy+SIZE]) {
          Line(0, YH+1);
        } <b>else</b> Skip(0, YH+1);
      } <b>else</b> <b>if</b> (ix &lt; 0) {
        <b>if</b> (sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+1+SIZE][iy+SIZE]) {
          Line(0, YH+1);
        } <b>else</b> Skip(0, YH+1);
      } <b>else</b> Skip(0, YH+1); <font color=#408080><i>// vertical at rhs of block</i></font>
      Skip(0, -YH);
    }
    Reset0Ref();
    Skip(-SIZE*XW, y);
  }
}

<b>void</b> support_nearest_center(<b>int</b> move, <b>int</b> draw) {
  <b>int</b> ix,x;
  <b>int</b> iy,y;

  Intensity_a(0x18);
  set_scale(move);
  <b>for</b> (iy = -SIZE, y = -SIZE*YH; iy &lt;= SIZE; y+=YH, iy+=1) {
    <b>for</b> (ix = -SIZE, x = -SIZE*XW; ix &lt;= SIZE; x+=XW, ix+=1) {
      <b>if</b> (ix||iy) {
        Reset0Ref(); 
        Move(x, y);
        set_scale(draw); 
        <b>if</b> (ix &lt;= 0) {
          <b>if</b> (iy &lt;= 0) {
            <font color=#408080><i>// diagonals at bottom left of sq[ix+SIZE][iy+SIZE]         </i></font>
            <b>if</b> (!sq[ix+SIZE][iy+SIZE]) { <font color=#408080><i>// solid squares occlude themselves</i></font>
              <b>if</b> (ix == -SIZE) {
                <b>if</b> (iy != -SIZE) {
                  <b>if</b> (sq[ix+SIZE][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  }
                }
              } <b>else</b> {
                <b>if</b> (iy == -SIZE) {
                  <b>if</b> (sq[ix+SIZE-1][iy+SIZE]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                } <b>else</b> {
                  <b>if</b> (!sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; sq[ix+SIZE][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>if</b> (sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> <b>if</b> (sq[ix+SIZE-1][iy+SIZE] &amp;&amp; sq[ix+SIZE][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  }
                }
              }
            }
          } <b>else</b> <b>if</b> (iy &gt; 0) {
            <font color=#408080><i>// REMAINING QUADRANT TO BE DONE</i></font>
            <font color=#408080><i>// diagonal is at lower left corner of sq[ix][iy]</i></font>
            <b>if</b> (ix == -SIZE) {
              <b>if</b> (iy &lt; SIZE) {
                <b>if</b> (sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
              }
            } <b>else</b> {
              <b>if</b> (iy == SIZE) {
                <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
              } <b>else</b> {
                <font color=#408080><i>// diagonal is at lower left corner of sq[ix][iy]</i></font>
                <b>if</b> (!sq[ix+SIZE][iy+SIZE-1]) {
                  <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> <b>if</b> (sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; sq[ix+SIZE][iy+SIZE]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> <b>if</b> (!sq[ix+SIZE-1][iy+SIZE] &amp;&amp; sq[ix+SIZE][iy+SIZE]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  }

                }
              }
            }
          } 
        } <b>else</b> <b>if</b> (ix &gt; 0) { <font color=#408080><i>// ALL DONE EXCEPT THE ZERO SPECIAL CASES</i></font>
          <b>if</b> (iy &gt; 0) { <font color=#408080><i>// DONE</i></font>
            <font color=#408080><i>// iy == SIZE is the invisible row above the area</i></font>
            <font color=#408080><i>// diagonals are drawn at bottom left corner of sq[ix+SIZE][iy+SIZE]</i></font>
            <b>if</b> (ix == SIZE) {
              <b>if</b> ((iy &lt; SIZE) &amp;&amp; sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
            } <b>else</b> {
              <b>if</b> (iy == SIZE) {
                <b>if</b> (sq[ix+SIZE][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1]) {
                  Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                }
              } <b>else</b> {
                <b>if</b> (sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1]) {
                  <b>if</b> (!sq[ix+SIZE-1][iy+SIZE]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                } <b>else</b> <b>if</b> (!sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp;
                     (sq[ix+SIZE-1][iy+SIZE] || sq[ix+SIZE][iy+SIZE-1])) {
                  Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                } <b>else</b> <b>if</b> (!sq[ix+SIZE-1][iy+SIZE-1]) {
                  <font color=#408080><i>// diagonals are drawn at bottom left corner of sq[ix+SIZE][iy+SIZE]</i></font>
                  <font color=#408080><i>// space left and below is free to draw into</i></font>
                  <b>if</b> (  ((sq[ix+SIZE-1][iy+SIZE] &amp;&amp; sq[ix+SIZE][iy+SIZE-1]))
                     || (sq[ix+SIZE][iy+SIZE] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE] &amp;&amp; !sq[ix+SIZE][iy+SIZE-1])) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  }
                }
              }
            }
          } <b>else</b> <b>if</b> (iy &lt;= 0) { <font color=#408080><i>// DONE!</i></font>
            <font color=#408080><i>// diagonal at top-left corner of sq[ix+SIZE][iy+SIZE]</i></font>
            <b>if</b> (ix == SIZE) { <font color=#408080><i>// absent row to right of area</i></font>
              <b>if</b> (iy == -SIZE) { <font color=#408080><i>// absent row below area</i></font>
              } <b>else</b> {
                <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1] &amp;&amp; !sq[ix+SIZE-1][iy+SIZE]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
              }
            } <b>else</b> {
              <font color=#408080><i>// ALWAYS draw diagonal at bottom-left corner of sq[ix+SIZE][iy+SIZE]</i></font>
              <b>if</b> (iy == -SIZE) {
                <b>if</b> (!sq[ix+SIZE-1][iy+SIZE] &amp;&amp; sq[ix+SIZE][iy+SIZE]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
              } <b>else</b> <b>if</b> (!sq[ix+SIZE-1][iy+SIZE]) {
                <font color=#408080><i>// room to draw into</i></font>
                <b>if</b> (sq[ix+SIZE][iy+SIZE]) {
                  <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1]) {
                    Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  } <b>else</b> {
                    <b>if</b> (!sq[ix+SIZE][iy+SIZE-1]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                  }
                } <b>else</b> <b>if</b> (sq[ix+SIZE-1][iy+SIZE-1]) {
                  <b>if</b> (!sq[ix+SIZE][iy+SIZE-1]) Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                } <b>else</b> <b>if</b> (sq[ix+SIZE][iy+SIZE-1]) {
                  Line(-ix&lt;&lt;SHIFT,-iy&lt;&lt;SHIFT);
                }
              }
            }
          } <b>else</b> {
            <font color=#408080><i>// iy == 0 - special case?</i></font>
          }
        } <b>else</b> {
          <font color=#408080><i>// center - ignore</i></font>
        }
        set_scale(move);
      }
    }
  }
}


<b>static</b> <b>unsigned</b> <b>int</b> _x, _a, _b, _c; 
<b>static</b> <b>void</b> initRandom(<b>unsigned</b> <b>int</b> s1,<b>unsigned</b> <b>int</b> s2,<b>unsigned</b> <b>int</b> s3, <b>unsigned</b> <b>int</b> x0) {
  _x = x0; _a = s1; _b = s2; _c = s3; _x++; _a = (_a^_c^_x); _b = (_b+_a); _c = ((_c+(_b&gt;&gt;1))^_a);
}

<b>static</b> <b>int</b> random(<b>void</b>) { <font color=#408080><i>// assert returns unsigned value that fits in an int.</i></font>
  _x++; _a = (_a^_c^_x); _b = (_b+_a); _c = ((_c+(_b&gt;&gt;1))^_a);
  <b>return</b> (<b>int</b>)_c;
}

<b>int</b> main(<b>void</b>)
{
  <font color=#408080><i>//int x, y;</i></font>
  <b>unsigned</b> <b>int</b> Prev_Btn_State = 0;
  initRandom(12,34,56,78); (<b>void</b>)random();
<font color=#408080><i>//#define TEST1</i></font>
<font color=#008000>#ifdef TEST1</font>
sq[0][3]=1;sq[1][3]=0;sq[2][3]=0;sq[3][3]=1;
sq[0][2]=0;sq[1][2]=1;sq[2][2]=1;sq[3][2]=0;
sq[0][1]=0;sq[1][1]=1;sq[2][1]=1;sq[3][1]=0;
sq[0][0]=1;sq[1][0]=0;sq[2][0]=0;sq[3][0]=1;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST2</font>
sq[0][3]=0;sq[1][3]=1;sq[2][3]=1;sq[3][3]=0;
sq[0][2]=1;sq[1][2]=0;sq[2][2]=0;sq[3][2]=1;
sq[0][1]=1;sq[1][1]=0;sq[2][1]=0;sq[3][1]=1;
sq[0][0]=0;sq[1][0]=1;sq[2][0]=1;sq[3][0]=0;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST3</font>
sq[0][3]=0;sq[1][3]=1;sq[2][3]=0;sq[3][3]=1;
sq[0][2]=1;sq[1][2]=0;sq[2][2]=1;sq[3][2]=0;
sq[0][1]=0;sq[1][1]=1;sq[2][1]=0;sq[3][1]=1;
sq[0][0]=1;sq[1][0]=0;sq[2][0]=1;sq[3][0]=0;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST4</font>
sq[0][3]=1;sq[1][3]=0;sq[2][3]=0;sq[3][3]=1;
sq[0][2]=1;sq[1][2]=0;sq[2][2]=0;sq[3][2]=1;
sq[0][1]=1;sq[1][1]=0;sq[2][1]=0;sq[3][1]=1;
sq[0][0]=1;sq[1][0]=0;sq[2][0]=0;sq[3][0]=1;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST5</font>
sq[0][3]=1;sq[1][3]=0;sq[2][3]=1;sq[3][3]=0;
sq[0][2]=0;sq[1][2]=1;sq[2][2]=0;sq[3][2]=1;
sq[0][1]=1;sq[1][1]=0;sq[2][1]=1;sq[3][1]=0;
sq[0][0]=0;sq[1][0]=1;sq[2][0]=0;sq[3][0]=1;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST6</font>
sq[0][3]=1;sq[1][3]=0;sq[2][3]=0;sq[3][3]=1;
sq[0][2]=1;sq[1][2]=0;sq[2][2]=0;sq[3][2]=1;
sq[0][1]=0;sq[1][1]=0;sq[2][1]=0;sq[3][1]=0;
sq[0][0]=0;sq[1][0]=0;sq[2][0]=0;sq[3][0]=0;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST7</font>
sq[0][3]=0;sq[1][3]=0;sq[2][3]=0;sq[3][3]=0;
sq[0][2]=0;sq[1][2]=0;sq[2][2]=0;sq[3][2]=0;
sq[0][1]=1;sq[1][1]=0;sq[2][1]=0;sq[3][1]=1;
sq[0][0]=1;sq[1][0]=0;sq[2][0]=0;sq[3][0]=1;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST8</font>
sq[0][3]=1;sq[1][3]=1;sq[2][3]=0;sq[3][3]=0;
sq[0][2]=0;sq[1][2]=0;sq[2][2]=0;sq[3][2]=0;
sq[0][1]=0;sq[1][1]=0;sq[2][1]=0;sq[3][1]=0;
sq[0][0]=0;sq[1][0]=0;sq[2][0]=1;sq[3][0]=1;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST9</font>
sq[0][3]=1;sq[1][3]=1;sq[2][3]=1;sq[3][3]=1;
sq[0][2]=1;sq[1][2]=0;sq[2][2]=0;sq[3][2]=1;
sq[0][1]=1;sq[1][1]=0;sq[2][1]=0;sq[3][1]=1;
sq[0][0]=1;sq[1][0]=1;sq[2][0]=1;sq[3][0]=1;
<font color=#008000>#else</font>
<font color=#008000>#ifdef TEST10</font>
sq[0][3]=1;sq[1][3]=0;sq[2][3]=0;sq[3][3]=1;
sq[0][2]=0;sq[1][2]=0;sq[2][2]=0;sq[3][2]=0;
sq[0][1]=0;sq[1][1]=0;sq[2][1]=0;sq[3][1]=0;
sq[0][0]=1;sq[1][0]=0;sq[2][0]=0;sq[3][0]=1;
<font color=#008000>#else</font>
  <b>int</b> x,y;
  <b>for</b> (y = -SIZE; y &lt; SIZE; y++) {
    <b>for</b> (x = -SIZE; x &lt; SIZE; x++) {
      sq[x+SIZE][y+SIZE] = random()&amp;1;
    }
  }
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
<font color=#008000>#endif</font>
  Read_Btns();
  <b>for</b> (;;) {
    Prev_Btn_State = Vec_Btn_State;
    Read_Btns();
    Wait_Recal(); Intensity_7F(); 
    roof(0x7E);
    ground(GROUND_SCALE);
    support_nearest_center(0x7E,(<b>int</b>) 0xFE);
    <b>if</b> (((Vec_Btn_State&amp;12) == 12) &amp;&amp; (Vec_Btn_State != Prev_Btn_State)) {
      <b>for</b> (y = -SIZE; y &lt; SIZE; y++) {
        <b>for</b> (x = -SIZE; x &lt; SIZE; x++) {
          sq[x+SIZE][y+SIZE] = random()&amp;1;
        }
      }
    }
  }
  <b>return</b> 0;
}

<font color=#408080><i>// ***************************************************************************</i></font>
<font color=#408080><i>// end of file</i></font>
<font color=#408080><i>// ***************************************************************************</i></font>
</pre></BODY></HTML>
@
