// ****************************************************************************
//
// Logic 8: Check for filled rows
//
// ****************************************************************************

#include "defines.txt"

#define cur_row v255
#define cur_x v254
#define varno v253
#define cell_value v252
#define tmp_x v251
#define tmp_y v250
#define real_tmp_x v249
#define real_tmp_y v248
#define num_rows_gone v247
#define row_filled f255

cur_row = 20;
num_rows_gone = 0;

next_row:
cur_x = 11;
set(row_filled);

next_x:
varno = cur_row;  varno *= 10;  varno += cur_x;  varno += 9;
cell_value = *varno;
if (cell_value == 0) { reset(row_filled); }

cur_x++;
if (cur_x < 21 && row_filled) {
  goto(next_x);
}

if (isset(row_filled)) {

  tmp_y = cur_row;
  next_tmp_y1:
  tmp_x = 11;
  next_tmp_x1:

  varno = tmp_y;  varno *= 10;  varno += tmp_x;  varno += 9;
  if (tmp_y > 1) {
    varno -= 10;
    cell_value = *varno;
    varno += 10;
    *varno = cell_value;
  }
  else {
    *varno = 0;
  }

  tmp_x++;
  if (tmp_x < 21) { goto(next_tmp_x1); }
  tmp_y--;
  if (tmp_y > 0) { goto(next_tmp_y1); }


  num_rows_gone++;
  cur_row++;
}

cur_row--;
if (cur_row > 0) {
  goto(next_row);
}

if (num_rows_gone > 0) {
  if (num_rows_gone == 1) { score_1 = score_1 + 10; }
  if (num_rows_gone == 2) { score_1 = score_1 + 20; }
  if (num_rows_gone == 3) { score_1 = score_1 + 50; }
  if (num_rows_gone == 4) { score_1 = score_1 + 100; }
  call(9); // update score
  call(10); // redraw playing area
}


return();