#<- helicopter, stlfighter

helicopter = [helicopter] metal_marine;
stlfighter = [stlfighter] metal_marine;

BF_* // HELICOPTER,
        STLFIGHTER;

...

void units_in (p_battle_field battle_field, punitproc fp)
{
  void process (pcell -&w cell, int i, int j) [fp]
  {
    select ()
    {
      case cell->unit_type == BF_HELICOPTER: 
        fp (cell->unit, cell->unit_type, ...);
      break;

      case cell->unit_type == BF_STLFIGHTER: 
        fp (cell->unit, cell->unit_type, ...);
      break;
    }
    else
    {
      error (ERR_UNIT_TYPE);
    }
  }

  for (i, j = 0; i < battle_field->width, j < battle_field->height; i, j ++)
  {
    process (cell, i, j) : (cell->unit),
    {
      pcell cell = battle_field->cells[i][j];
    };
  }
}